tag - qué tipos de etiquetas existen en git
Bifurcación vs. Ramificación en GitHub (4)
Me gustaría saber más sobre las ventajas y desventajas de forking un proyecto github en lugar de crear una rama de un proyecto github.
Forking 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. Ya que estamos desarrollando un proyecto en casa, no hay problema en agregar personas como colaboradores. Pero, nos gustaría entender si forking un proyecto haría que los cambios de fusión al proyecto principal sean más difíciles. Es decir, me pregunto si la bifurcación hace que mantener los dos proyectos sincronizados sea más fácil. En otras palabras, ¿es más fácil fusionar e impulsar cambios entre mi versión del proyecto principal y el proyecto principal cuando me bifurco?
Aquí están las diferencias de alto nivel:
Bifurcación
Pros
- Mantiene las ramas separadas por usuario
- Reduce el desorden en el repositorio primario
- El proceso de su equipo refleja el proceso de contribución externa.
Contras
- Hace que sea más difícil ver todas las ramas que están activas (o inactivas, en realidad)
- Colaborar en una rama es más complicado (el propietario de la bifurcación debe agregar a la persona como colaborador)
- Necesitas entender 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 están muy cómodas con Git
Derivación
Pros
- Mantiene todo el trabajo que se realiza alrededor de un proyecto en un solo lugar
- Todos los colaboradores pueden empujar a la misma rama para colaborar en ella.
- Solo hay un Git remoto para tratar
Contras
- Las ramas que se abandonan pueden apilarse más fácilmente.
- El proceso de contribución de su equipo no coincide con el proceso de contribución externa
- Debe agregar miembros del equipo como contribuyentes antes de que puedan ramificarse
No siempre puedes hacer una rama o jalar una rama existente y volver a ella, porque no estás registrado como colaborador para ese proyecto específico.
Bifurcación no es más que un clon en el lado del servidor GitHub :
- sin la posibilidad de empujar directamente hacia atrás
- con la función de cola de bifurcación agregada para administrar la solicitud de fusión
Mantienes un fork sincronizado con el proyecto original al:
- añadiendo el proyecto original como un mando a distancia
- Recogiendo regularmente de ese proyecto original.
- Cambie de base su desarrollo actual en la parte superior de la rama de interés que recibió actualizada de esa búsqueda.
La reorganización le permite asegurarse de que sus cambios sean directos (no se manejen conflictos de fusión), lo que hace que su solicitud de extracción sea más fácil cuando desea que el mantenedor del proyecto original incluya sus parches en su proyecto.
El objetivo es realmente permitir la colaboración, aunque la participación directa no siempre es posible.
El hecho de que clone en el lado de GitHub significa que ahora tiene dos repositorios "centrales" ("central" como "visible desde varios colaboradores).
Si puede agregarlos directamente como colaborador para un proyecto, no necesita administrar otro con un tenedor.
La experiencia de fusión sería aproximadamente la misma, pero con un nivel adicional de indirección (empuje primero en la bifurcación, luego pida un impulso, con el riesgo de evoluciones en el repositorio original haciendo que su avance rápido no sea más rápido) .
Eso significa que el flujo de trabajo correcto es git pull --rebase upstream
(volver a basar su trabajo sobre nuevos confirmes de upstream), y luego git push --force origin
, para reescribir el historial de tal manera que sus propios compromisos sean siempre en la parte superior de las confirmaciones del repositorio original (ascendente).
Ver también:
- Git tenedor es git clon?
- Obtenga nuevas actualizaciones del repositorio original de Github en el repositorio bifurcado de Github
Tiene que ver con el flujo de trabajo general de Git. Es poco probable que pueda ingresar directamente al repositorio del proyecto principal. No estoy seguro de si el repositorio del proyecto GitHub es compatible con el control de acceso basado en ramas, ya que no querría otorgar a nadie el permiso para ingresar a la rama maestra, por ejemplo.
El patrón general es el siguiente:
- Bifurque el repositorio del proyecto original para tener su propia copia de GitHub, a la que luego se le permitirá impulsar cambios.
- Clone su repositorio GitHub en su máquina local
- Opcionalmente, agregue el repositorio original como un repositorio remoto adicional en su repositorio local. Entonces podrás recuperar los cambios publicados en ese repositorio directamente.
- Realiza tus modificaciones y tus propios compromisos a nivel local.
- Inserte los cambios en su repositorio de GitHub (ya que generalmente no tendrá los permisos de escritura directamente en el repositorio del proyecto).
- Póngase en contacto con los mantenedores del proyecto y pídales que recojan sus cambios y revisen / fusionen, y permítales regresar al repositorio del proyecto (si usted y ellos lo desean).
Sin esto, es bastante inusual que los proyectos públicos dejen a cualquiera empujar sus propios compromisos directamente.
Forking crea un repositorio completamente nuevo desde el repositorio existente (simplemente haciendo git clone en gitHub / bitbucket)
Las bifurcaciones se utilizan mejor: cuando la intención de la "división" es crear un proyecto lógicamente independiente, que nunca puede reunirse con su padre.
La estrategia de sucursal crea una nueva sucursal sobre el repositorio existente / de trabajo
Las ramas se utilizan mejor: cuando se crean como lugares temporales para trabajar a través de una entidad, con la intención de fusionar la rama con el origen.
Más específico: - En los proyectos de código abierto, es el propietario del repositorio quien decide quién puede enviar al repositorio. Sin embargo, la idea del código abierto es que todos pueden contribuir al proyecto.
Este problema se resuelve con las bifurcaciones: cada vez que un desarrollador desea cambiar algo en un proyecto de código abierto, no clona el repositorio oficial directamente. En su lugar, lo bifurcan para crear una copia. Cuando finaliza el trabajo, realizan una solicitud de extracción para que el propietario del repositorio pueda revisar los cambios y decidir si fusionarlos con su proyecto.
En su núcleo, la bifurcación es similar a la bifurcación de características, pero en lugar de crear bifurcaciones, se crea una bifurcación del repositorio y, en lugar de realizar una solicitud de fusión, se crea una solicitud de extracción.
Los siguientes enlaces proporcionan la diferencia de una manera bien explicada:
https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/