Administrar a varias personas que trabajan en un proyecto con GIT

32

Soy muy nuevo en GIT / GitHub (tan nuevo como comenzar ayer). Me gustaría saber cuál es la mejor manera de administrar a varias personas que trabajan en el mismo proyecto con Github. Actualmente estoy gestionando un proyecto con cuatro desarrolladores.

  1. ¿Cómo hago para el flujo de trabajo y me aseguro de que todo esté sincronizado?

    (Nota: todos los desarrolladores tendrán una cuenta universal).

  2. ¿Cada desarrollador necesita estar en una rama diferente?

  3. ¿Podré manejar a 2 personas que trabajan en el mismo archivo?

Por favor, publique una respuesta detallada, no soy un lector tímido. Necesito entender esto bien.

badZoke
fuente
77
¿Una cuenta para todos los desarrolladores? Eso podría funcionar, pero lo más probable es que no sea una buena idea.
marstato
Puede valer la pena mirar en GitFlow y Trunk Based Development . Personalmente, he tenido un gran éxito con este último
J Lewis

Respuestas:

29

Si todos los desarrolladores tienen acceso de confirmación al repositorio, no debería necesitar hacer nada especial. Sacarán los cambios del repositorio, harán sus propios cambios, se comprometerán localmente y luego volverán al repositorio público cuando tengan algo que funcione.

Si, por otro lado, tiene uno (o algunos) desarrolladores responsables de comprometerse con el repositorio, y los demás están proporcionando parches a estos. Haga que cada uno de ellos clone el repositorio en sus propias cuentas y que envíen solicitudes de extracción cuando tengan un cambio que deseen en el repositorio principal.

También es posible hacer clones específicos para trabajar en funciones específicas si lo desea. Usar el mismo flujo de trabajo con solicitudes de extracción para obtener cambios en el repositorio principal cuando se realiza la función.

Si por "Todos los desarrolladores tendrán una cuenta universal", quiere decir que todos los desarrolladores compartirán una cuenta de GitHub y aparecerán como el mismo confirmador en el repositorio, es una mala idea. Cree cuentas separadas y configúrelas como colaboradores si desea que todos tengan acceso de confirmación.

En cuanto a sus preguntas específicas:

  1. No, use ramas para características, arreglos, etc. que requerirán más de una confirmación. Más de un desarrollador puede estar trabajando en la misma rama.

  2. Sí, git maneja los conflictos realmente bien, por lo que no hay problemas para que las personas trabajen en el mismo archivo. Sin problemas, excepto que la resolución de conflictos no siempre es trivial si hay cambios fundamentales en un archivo que ha sido editado por más de un miembro. Sin embargo, esto no es nada que no se pueda superar hablando juntos. El control de versiones no reemplaza la comunicación.

¡Buena suerte!

harald
fuente
Un par de puntos que ha dicho que son reveladores, me hicieron pensar en una dirección diferente todos juntos, ¡gracias!
badZoke
Hapy si te puede ayudar. Git y DVCS requieren acostumbrarse, pero son extremadamente flexibles una vez que te acostumbras.
harald
Gracias por esto. Tenía una pregunta específica Si hay varios desarrolladores trabajando en la misma rama. Cada vez que uno de los desarrolladores realiza cambios y avanza a la rama de trabajo, ¿el resto de los desarrolladores necesitan extraer los cambios (para asegurarse de que tienen el último código local para trabajar)?
Eswar Rajesh Pinapala
No, no todas las veces, solo cuando quieres sincronizar. Considere su copia local de la sucursal como su sucursal privada, y la sucursal aguas arriba como la que desea fusionar. Usar algo como git fetch upstreamseguido git merge upstream/branchdebería sincronizarlo sin tener que volver a escribir su historial de confirmación local. Si eso no es un problema, simplemente git pull --rebasemoverá sus cambios locales no apresurados a la parte superior de la rama ascendente.
harald
@badZoke ... lo que hiciste para manejar tu tercera pregunta (manejar 2 personas que trabajan en el mismo archivo) ...
Moumit
25

Trabajamos con 2 desarrolladores y usamos este flujo de trabajo:

  • En Github tenemos una rama maestra y una rama de desarrollo
  • La rama maestra es la misma que la producción o contiene código listo para la implementación
  • La rama de desarrollo está por delante del maestro y contiene todo el código nuevo que se está trabajando actualmente
  • Localmente, ambos trabajamos en la rama de desarrollo y empujamos a github cuando algo está listo
  • El otro desarrollador recupera cualquier cambio nuevo de la rama de desarrollo antes de enviar su nuevo código
  • Cuando la rama de desarrollo es buena, nos fusionamos con la rama maestra
  • A nivel local tenemos varias ramas de características, ramas de emisión, etc.
John
fuente
1
Agradable y simple, muchas gracias! Comenzaré con esto, antes de pasar a las cosas complejas;)
badZoke
¿Qué pasa si, cuando el otro desarrollador obtiene los nuevos cambios, antes de presionar su código, los nuevos cambios alteran el código que ya ha cambiado?
wayofthefuture
+1, este es de hecho el más simple para comenzar, y funciona perfectamente bien. Lo que está usando se llama gitflow simplificado: marcgg.com/assets/blog/git-flow-before.jpg
Jelle
5

Aquí solo veo respuestas de texto, así que pensé en publicar una imagen de un buen flujo de información para empezar. Una imagen describe más de mil palabras:

Gitflow simplificado

  • Este flujo también funciona bien con la implementación continua.
  • Su rama maestra contiene código que se está ejecutando actualmente en su servidor de producción.
  • Su rama de desarrollo contiene código que se está ejecutando actualmente en un servidor de ensayo / prueba.
Jelle
fuente
+1, git flow o algo similar es probablemente la respuesta correcta a esta pregunta.
Quizás_Factor
0

Trabajo con otros 3 desarrolladores, y luchamos bastante con esto. Los desarrolladores a veces empujan los compromisos a la producción que realmente aún no están listos para el horario estelar porque atraen otros compromisos a sus cambios y luego empujan a la producción. Las ramas de la versión parecen funcionar bien para nosotros. Entonces, si la versión 1.0 es la versión estable actual, crearemos una rama para el desarrollo v1.1. Los desarrolladores harán cambios en esta rama. Nuestro servidor de prueba revisa esta rama y extrae los cambios según sea necesario. Cuando todas las características para v1.1 estén listas para funcionar y se realicen las pruebas, fusionaremos v1.1 con master y push. Con sucursales, el equipo de desarrolladores A puede trabajar en v1.1 y el equipo de desarrolladores B puede trabajar en v1.2. Ambos equipos pueden trabajar sin impactar entre sí. Si el equipo A desarrolla algo que B puede usar,

También usamos una rama de revisión que se usa para cambios inmediatos.

Aquí hay un enlace a una imagen de cómo se ve esto. http://nvie.com/img/[email protected]

Greg
fuente
Eso no me parece que realmente esté implementando git flow como se pretendía, que es dividir cada característica independiente o corregirla en su propia rama, en lugar de solo cada lanzamiento
Brad Thomas