¿La forma correcta de usar git / github / bitbucket como equipo de desarrollo?

Supongamos que hay un total de tres personas trabajando en el proyecto. Persona A, B y C. Los tres crearon una twig desde el maestro. ¿Cuál debería ser el flujo de trabajo adecuado usando github?

Digamos que A se fusionó para dominar primero, ¿qué debe hacer B para fusionar el código de B en maestro ?, la misma pregunta va para C.

¿Con qué frecuencia debe fusionarse el equipo para dominar? ¿Diario? ¿semanal? o cada vez que se implementa una nueva característica?

¿Algún otro buen consejo sobre el uso de git / github / bitbucket como equipo?

¡Muchas gracias!

Si todos ustedes están comenzando con la administración de código distribuido, es una buena idea hacerlo desde el primer momento. Elija uno de los flujos de trabajo establecidos, lea sobre él, juegue un poco y luego sea productivo.

Mi favorito personal es "Sucursal por function" por Dymitruk: http://dymitruk.com/blog/2012/02/05/branch-per-feature . Es muy potente, la presentación es muy clara y completa, simplemente funciona y la OMI hace algunas cosas mejor que el flujo de trabajo "habitual" ( http://nvie.com/posts/a-successful-git-branching-model / como se publicó en otra respuesta aquí) donde tienes una twig de "desarrollo" dedicada. Por supuesto, tampoco hará mucho mal con el último.

Sus preguntas serán respondidas en esas páginas (Dymitruk hace la "fusión para dominar" fundamentalmente diferente, no hay pregunta / problema sobre orderar, básicamente "combinar para dominar" es equivalente a "lanzamiento de producción").

Simplemente no intentes aletear e devise tu propio esquema siempre y cuando estés en el estado en que te encuentras ahora (es decir, nuevo en todo esto).

Siempre haz git pull origin master antes de fusionar tu twig en master.

Después de eso, envía tus cambios a una twig en particular.

  • git push origin brnach_name

Ahora, puedes fusionarte con el maestro.

Normalmente, una vez debe fusionar su twig con el maestro. Siempre que haya una nueva característica.

Durante los últimos 12 meses he estado usando este model de twig de características de Git con buenos resultados en un equipo de 4 desarrolladores y yo para QA.

Promuevo push / pull regulares dentro del equipo: sabemos rápidamente si el código rompe otro código, puede resolver conflictos de fusión antes de que se salgan de control, y arreglar problemas potenciales, etc. Hace que el equipo se comunique y queuebore regularmente. Vincent dice que "estas acciones son extremadamente baratas y simples, y se consideran una de las partes centrales de su flujo de trabajo diario".

Vincent continúa describiendo el repository de origin como el "repository de verdad central" desde el cual los desarrolladores construyen su propio repository. Utilizamos una twig master para reflejar siempre lo que está en los serveres de producción (con tags para versiones), develop para reflejar lo que está en nuestros serveres de etapas y twigs específicas de funciones con códigos de tickets JIRA (por ejemplo, PROJ-001-fixes-all-teh-bugs ) junto con la integración de JIRA.

Los desarrolladores pueden entonces trabajar en una twig de características por sí mismos, o queueborar con otro miembro del equipo que empuja / tira entre sus repositorys en la misma twig de características. Empujan hacia el origin al final del día para actualizar "la verdad".

Vincent continúa describiendo las twigs de revisión y las twigs de publicación, aunque todavía no hemos necesitado utilizar esta última.

Como hemos vinculado BitBucket en JIRA, notamos que los repositorys de fork privados no actualizan los estados de los tickets, etc., pero un push diario al origin (incluso en una twig de características) hará el truco.

Una vez que la twig de características está list, nuestros desarrolladores ingresan requestes de extracción, tenemos reuniones para aprobar / ajustar, y se fusiona para develop y luego master cuando está en marcha. Si el jefe decide que una característica es una mierda, podemos revertir la fusión de la twig y publicar otras funciones, una poderosa herramienta.

Algunos desarrolladores encontraron que trabajar en un tenedor es demasiado esfuerzo / confuso para comenzar. ¡Perseverar! Se convierte en una segunda naturaleza (incluso para mí, y no soy muy bueno) y nos salvó de situaciones difíciles y códigos terribles.

Si todo eso suena bien …

Digamos que A se fusionó para dominar primero, ¿qué debe hacer B para fusionar el código de B en maestro ?, la misma pregunta va para C.

Usando el model de Vincent, AB y C estarían trabajando en tenedores de repositorys privados en una twig de características. Pueden tirar regularmente el uno del otro mientras trabajan en su propio tenedor. Inevitablemente, un desarrollador se queda con el código más reciente que lo empuja hacia una twig de características en origin y coloca un PR.

¿Con qué frecuencia debe fusionarse el equipo para dominar? ¿Diario? ¿semanal? o cada vez que se implementa una nueva característica?

Una fusión con el origin/master solo ocurrirá cuando la function esté a punto de implementarse. Nos fusionaríamos primero con el origin/develop , lo probaremos en nuestro entorno de ensayo y luego develop twig PR en master .

Descubrimos que fusionar y empujar twigs de características activas al origin al less diariamente es una buena práctica y actualiza los estados de JIRA.

¿Algún otro buen consejo sobre el uso de git / github / bitbucket como equipo?

Aprende a lidiar con los conflictos de combinación, revocando commits y revertir commits de fusión sin esfuerzo 🙂 Habla regularmente dentro del equipo. Si le gusta el model de Vincent, envíe el artículo a todos y tenga una discusión sobre cómo puede funcionar. Tal vez incluso practique Git-fu en un proyecto falso.

Esta respuesta asume lo siguiente …

Servicio
Git Hub

Tamaño del equipo
2 <= x <= 7

Repositorio
Privado

Para un pequeño equipo de desarrolladores que trabajan en un proyecto pequeño, puede agregar a todos los desarrolladores como queueboradores . Esto proporcionará a cada queueborador acceso de lectura / escritura .

Dado lo anterior, cada desarrollador puede crear una twig de características donde pueda realizar cualquier tipo de modificación que considere apropiada y, llegado el momento, emitir una request de extracción.

¿Qué es una request de extracción? La request de extracción es una forma de comunicar los cambios que realiza con el rest del equipo. Puede emitir una request de extracción y el equipo podrá revisar su trabajo, hacer sugerencias y, cuando todos estén contentos, fusionar el trabajo nuevamente en la producción.

Siempre puede fusionar su trabajo de nuevo en la producción, pero esto generalmente NO es recomendable. Después de todo, eres un equipo.

Entonces, ¿con qué frecuencia debes comprometerte? No existe una directriz estricta sobre la frecuencia con la que debe comprometerse, pero se considera una buena práctica mantenerlo de grano grueso . Cada vez que realice un cambio en su código, tiene que ser específico, algo que podría describir fácilmente en un post de compromiso.

Ahora, sobre el flujo de trabajo del proyecto. Ha creado un repository y ha configurado a sus queueboradores, es hora de realizar un trabajo.

Cada queueborador clona el repository y crea una twig de características en la que trabajarán. Hacen algo de trabajo: stage + commit y empujan su trabajo hacia arriba . Para mantenerse al día con todos los cambios que realizan en sus twigs de características, solo recuerde instruir a Git para que lo haga de vez en cuando. Alternativamente, puede indicarle a git que busque el flujo ascendente y que lo fusione manualmente.

Cuando uno de los miembros de su equipo está listo con su twig de características, debe emitir una request de extracción. En este punto, revisa el trabajo que han realizado, hacen los comentarios apropiados y, si todos están satisfechos, lo fusionan en producción.

La información anterior está escrita para cubrir el process en un nivel introductorio y, por supuesto, no es la única forma de cómo trabajar con git. Debería servir como material introductorio para el flujo de trabajo de git en equipos de proyectos pequeños. La respuesta no cubre todas las forms posibles de ejecutar un proyecto en cualquiera de los services (Git Hub, Gitbucket, etc.). Espero que lo encuentres informativo.