Bifurcación versus ramificación en GitHub

Resuelto reprogrammer asked hace 14 años • 4 respuestas

Me gustaría saber más sobre las ventajas y desventajas de bifurcar un proyecto github frente a crear una rama de un proyecto github.

La bifurcación hace que mi versión del proyecto esté más aislada de la original porque no tengo que estar en la lista de colaboradores del proyecto original. Como estamos desarrollando un proyecto internamente, no hay problema en agregar personas como colaboradores. Pero nos gustaría entender si bifurcar un proyecto dificultaría la fusión de cambios en el proyecto principal. Es decir, me pregunto si la ramificación facilita la sincronización de los dos proyectos. En otras palabras, ¿es más fácil fusionar e impulsar cambios entre mi versión del proyecto principal y el proyecto principal cuando hago una bifurcación?

reprogrammer avatar Aug 31 '10 23:08 reprogrammer
Aceptado

No siempre puedes crear una rama o extraer una rama existente y volver a ella, porque no estás registrado como colaborador para ese proyecto específico.

La bifurcación no es más que un clon en el lado del servidor GitHub :

  • sin posibilidad de empujar directamente hacia atrás
  • con función de cola de bifurcación agregada para administrar la solicitud de fusión

Mantienes una bifurcación sincronizada con el proyecto original al:

  • agregando el proyecto original como control remoto
  • obteniendo regularmente de ese proyecto original
  • Vuelva a basar su desarrollo actual sobre la rama de interés que actualizó durante esa búsqueda.

La rebase le permite asegurarse de que sus cambios sean sencillos (no hay conflictos de fusión que manejar), lo que hace que su solicitud de extracción sea más fácil cuando desea que el responsable del proyecto original incluya sus parches en su proyecto.

En realidad, el objetivo es permitir la colaboración, aunque la participación directa no siempre sea posible.


El hecho de que clones en el lado de GitHub significa que ahora tienes dos repositorios "centrales" ("centrales" como "visibles para varios colaboradores).
Si puedes agregarlos directamente como colaboradores para un proyecto, no necesitas administrar otro uno con un tenedor.

bifurcación en GitHub

La experiencia de fusión sería más o menos la misma, pero con un nivel adicional de indirección (presione primero la bifurcación, luego solicite un tirón, con el riesgo de que las evoluciones en el repositorio original hagan que sus fusiones de avance rápido ya no avancen más) .
Eso significa que el flujo de trabajo correcto es git pull --rebase upstream(rebasar su trabajo sobre las nuevas confirmaciones desde arriba) y luegogit push --force origin , para reescribir el historial de tal manera que sus propias confirmaciones estén siempre por encima de las confirmaciones del repositorio original (ascendente). .

Ver también:

  • ¿Git fork es un clon de git?
  • Extraiga nuevas actualizaciones del repositorio de Github original al repositorio de Github bifurcado
VonC avatar Aug 31 '2010 16:08 VonC

Aquí están las diferencias de alto nivel:

bifurcando

Ventajas

  • Mantiene las ramas separadas por usuario
  • Reduce el desorden en el repositorio principal
  • El proceso de su equipo refleja el proceso del colaborador externo.

Contras

  • Hace que sea más difícil ver todas las ramas que están activas (o inactivas, de hecho)
  • Colaborar en una sucursal es más complicado (el propietario de la bifurcación debe agregar a la persona como colaborador)
  • Necesitas comprender el concepto de múltiples controles remotos en Git.
    • Requiere contabilidad mental adicional
    • Esto hará que el flujo de trabajo sea más difícil para las personas que no se sienten muy cómodas con Git.

Derivación

Ventajas

  • Mantiene todo el trabajo que se realiza en torno a un proyecto en un solo lugar
  • Todos los colaboradores pueden ingresar a la misma sucursal para colaborar en ella.
  • Sólo hay un control remoto Git con el que lidiar

Contras

  • Las sucursales que se abandonan pueden acumularse más fácilmente
  • El proceso de contribución de su equipo no coincide con el proceso de contribución externa
  • Debes agregar miembros del equipo como contribuyentes antes de que puedan ramificarse.
Aidan Feldman avatar Dec 17 '2015 19:12 Aidan Feldman

Tiene que ver con el flujo de trabajo general de Git. Es poco probable que puedas enviar directamente al repositorio del proyecto principal. No estoy seguro de si el repositorio del proyecto GitHub admite el control de acceso basado en ramas, ya que no querrás otorgarle a nadie el permiso para enviar a la rama maestra, por ejemplo.

El patrón general es el siguiente:

  • Bifurca el repositorio del proyecto original para tener tu propia copia de GitHub, a la que luego podrás enviar cambios.
  • Clona tu repositorio de GitHub en tu máquina local
  • Opcionalmente, agregue el repositorio original como repositorio remoto adicional en su repositorio local. Luego podrá recuperar los cambios publicados en ese repositorio directamente.
  • Realice sus modificaciones y sus propios compromisos localmente.
  • Envíe sus cambios a su repositorio de GitHub (ya que generalmente no tendrá permisos de escritura directamente en el repositorio del proyecto).
  • Póngase en contacto con los mantenedores del proyecto y pídales que obtengan sus cambios y los revisen/fusionen, y permítales enviarlos de vuelta al repositorio del proyecto (si usted y ellos así lo desean).

Sin esto, es bastante inusual que los proyectos públicos permitan que alguien impulse sus propios compromisos directamente.

Bruno avatar Aug 31 '2010 16:08 Bruno