2010-10-09 15 views
9

En primer lugar, lo siento si se trata de un duplicado, pero traté de buscar y todo lo que pude encontrar fue información sobre cómo hacer ramas en Git y otras cosas. Eso no es lo que estoy buscando tanto; Estoy tratando de descubrir cómo las diferentes personas configuran sus ramas de Git para que coincidan con su flujo de trabajo.¿Cuáles son algunos de los esquemas de ramificación/compromiso de vida más comunes de Git?

Déjeme darle un ejemplo de cómo nuestra empresa lo hace:

  1. desarrollador se compromete en su propia rama, localmente
  2. desarrollador empuja comprometerse con su mando a distancia, donde un sistema de integración continua la comprueba y otro desarrollador revisa
  3. Si la revisión/construir pases, la confirmación se fusionaron en una rama de control de calidad (si no funciona, se hacen más confirmaciones hasta que la revisión/construir pases)
  4. Si la confirmación falla de control de calidad, una reversión cometer está hecho para sacarlo
  5. Después de que las confirmaciones de QA estén listas, nuestra rama maestra recibe las confirmaciones (la rama de control de calidad se basa en ella, por lo que no se necesitan fusiones)
  6. Las ramificaciones periódicas se toman de la rama maestra y se usan para liberar "en la naturaleza" ". Si se encuentran problemas aquí, una reversión cometer volverá a ser utilizado para eliminar el código
  7. Después de un lanzamiento, los desarrolladores de rebase sus ramas en la rama principal (conseguir ambos sus confirmaciones sobre las previas y las de otros desarrolladores)

Ahora, hay algunos problemas con este sistema; Notaré algunos en los comentarios, pero realmente no estoy buscando "arregle nuestro sistema por favor", solo estoy tratando de ver qué otras opciones de ramificación podríamos usar en su lugar, para poder pesar el varias posibilidades.

Entonces, si ha trabajado en varias compañías que usan Git (o incluso mejor, si es una especie de consultor que ha visto montones de configuraciones de Git), ¿podría compartir: cómo las diferentes compañías configuran las sucursales de Git? (y mueve commits entre ellos) para facilitar las diversas etapas de desarrollo ... ¿todo mientras trata de ser lo menos molesto posible? Estoy seguro de que debe haber algunos patrones comunes ... pero no tengo idea de lo que son.

P.S. Si solo has visto una configuración de Git, pero crees que es interesante, por favor, publícala. Sin embargo, me gustaría otorgar la respuesta a quien ofrezca el mejor desglose de opciones posibles, y espero que venga de alguien que haya visto varias configuraciones de Git.

+0

He mencionado que nuestro sistema tiene problemas. Un ejemplo es la rebase: Git tiene todas estas geniales funciones de rebase, pero solo podemos usarlo desde el principio (antes de que una confirmación haya pasado a QA), o al final (para llevar las confirmaciones a las ramas de desarrollador); si queremos volver a organizar o eliminar commits en cualquier momento entre medio tenemos que usar revertir commits. Esto nos lleva a otro problema, nuestro historial de Git: debido a todas las confusiones de fusión y reenvío de confirmaciones que hacemos, obtenemos toneladas de spam de registro. Otro problema con este sistema es que los commits no se pueden compartir fácilmente entre los desarrolladores (para la programación entre pares) ... – machineghost

+0

... y también hay otros problemas, pero como dije no estoy buscando soluciones específicas aquí, solo alguna comprensión de posibles alternativas. – machineghost

+0

Agregue esto a la publicación principal y no a comentarios. –

Respuesta

6

He estado administrando varios equipos ahora que están usando Git y hemos desarrollado una estrategia que funciona muy bien para nosotros.

  • Master es SIEMPRE una copia de EXACTLY lo que está en producción. Cuando se libera el código, la rama actual se reenvía rápidamente al maestro, y se agrega una etiqueta para que la publicación se marque a tiempo y podamos tomar el código si alguna vez lo necesitamos.
  • Los desarrolladores tienen la libertad de trabajar de la mejor manera en SUS ramas, sin embargo, para ramas de características, generalmente tenemos una rama para cada característica y varios desarrolladores se fusionan desde y hacia esa rama para compartir el trabajo en esa función.
  • Cuando llega la hora de un candidato de lanzamiento, se crea una bifurcación RC_XXX y las bifurcaciones de la característica que están lo suficientemente lejos se fusionan en ella. Esto luego se prueba y las correcciones de errores se derivan de esto.
  • Cuando todo está dicho y hecho, la rama RC_XXX se libera a la producción, y después de que se "pega" durante unos días, la promovemos a la maestra y las nuevas ramas de características se basan en ella.

Esto funciona muy bien, ya que las soluciones rápidas contra la producción son fáciles de crear e implementar simplemente ramificando desde el maestro, y los desarrolladores pueden ramificarse contra las ramas de características para obtener dependencias si es necesario.

+0

Acepté esta respuesta porque el ejemplo provino de varios equipos de Git ", y no parecía haber otras respuestas. Sin embargo, si alguien más tiene más ejemplos, aún así me encantaría verlos. Esta estrategia particular no funciona bien para cómo QA: nuestro equipo de control de calidad alterna constantemente entre pruebas de trabajo de diferentes desarrolladores, luego cada X días (X varía según el equipo) lanzamos todo lo que ha pasado desde el último lanzamiento.Si algo falla en la garantía de calidad, simplemente lo elimina QA. No sé si alguien más tiene el mismo estilo, pero incluso si no lo hiciera, aún apreciaría otros ejemplos. – machineghost

1

¿Qué hay de esto (estoy haciendo caso omiso de lo que los desarrolladores tienen en su máquina):

  • cada desarrollador ha aceptado una rama de parches (QA se compromete aquí), que está basado en el último punto de control principal (nueva rama para cada versión)
  • cada desarrollador tiene una rama de parches a la espera de que se compromete en que se reajusta continuamente contra la rama parches aceptado (rama persistente)
  • vez de control de calidad se realiza para todos los desarrolladores, todos los parches ramas aceptadas se combinan en master
  • se crean nuevas ramas de control de calidad y todos los desarrolladores vuelven a tener una nueva base
+0

Respuesta mucho más precisa que la mía. +1 – VonC

+0

Esta es una opción interesante; gracias (todavía estoy buscando ver otras opciones también :-)). – machineghost

0

"Después de un lanzamiento, los desarrolladores vuelven a establecer sus sucursales": ouch ...

No soy un consultor de Git (todavía), pero por experiencia, los desarrolladores deberían volver a basar su trabajo con mucha más frecuencia (que solo "justo después de un lanzamiento").
De lo contrario, como mencionas en tu comentario, eso conduce a un montón de "git revert" (que funciona, pero debe seguir siendo una ocurrencia excepcional en lugar de una solución común).

La colaboración punto a punto es posible pero implica un poco de disciplina como es requires setting up a bare repo y local protocol.

+0

Lanzamos semanalmente, por lo que no suena tan mal :-) Pero, de nuevo, estoy tratando de centrarme en el ecosistema Git más grande, y las diferentes formas en que todos configuran sus sucursales/repositorios Git, no en mi compañía específicamente (uno Lo que he observado hasta ahora es que no hay una respuesta "correcta" sobre qué hacer con Git, solo respuestas "correctas para X", y dado que ni siquiera sé todas las X posibles que debería considerar, centrándome en "resolver" nuestra configuración es un poco prematuro). – machineghost

Cuestiones relacionadas