Cuando uso ramas de características, me gusta retener el hecho de que una característica se desarrolló en una rama después de la fusión. Eso hace que navegar por la historia sea mucho más fácil. Agrupa los cambios por función o error y hace que sea más fácil saber lo más importante: por qué se realizó un cambio.
Por eso, cuando me fusiono, desactivo deliberadamente el reenvío rápido con git merge --no-ff
. Esto conserva la estructura de la rama en la historia. Entonces, soy libre de eliminar la etiqueta de rama (git branch -d branch_name
), el punto de fusión contiene el nombre de la rama y limpiar el conjunto de ramas.
Por el contrario, cuando se trabaja en una rama, prefiero rebase la rama ascendente. Esto mantiene el historial de la sucursal limpio y agradable, libre de mucho ruido de fusión ascendente y resolución de conflictos.Por lo general, volveré a establecer una base de datos antes de fusionarme para facilitar el trabajo de integración (ya que el autor de la sucursal puedo solucionar conflictos y pruebas rotas) y el limpiador de combinación resultante.
Este enfoque conserva el historial de las ramas al tiempo que evita que las ramas antiguas que ya no se desarrollen obstruyan las cosas. Hace que la visualización de la historia con gitk o GitX sea muy útil.
Estoy de acuerdo con los puntos básicos del artículo que vinculó, a medida que obtiene más ramas de funciones grandes que se trabajan simultáneamente, hay más y más posibilidades de problemas de conflicto e integración. El aislamiento que los hace tan útiles se convierte en una responsabilidad. Una de las soluciones es no tener ramas grandes y antiguas. Si puede reventar una rama de función en piezas más pequeñas que pueden completarse e integrarse, entonces evita el problema. Esto a menudo es útil por muchas otras razones, como el pobre cabrón que tiene que revisar el código.
Si es posible integrar continuamente una rama de características en la línea principal, entonces la rama de características debe tener un trabajo útil, probado y documentado. Si tiene eso, entonces esos podrían ser cortados en sus propias ramas.
libremente admito que puede estar leyendo demasiado en esto, pero uno de los defectos posiblemente contando en el artículo es que las ramas se nombran para las personas y no características. Esto implica que cada rama es para "lo que sea que Jim esté trabajando" en lugar de "agregar widgets azules". Implica una serie de problemas de desarrollo ...
- características y las ramas son propiedad por individuos o equipos
- ramas no son para funciones discretas
- lugar, las ramas son parques infantiles personales
- con sin característica definida, pueden seguir y seguir
- desarrollo se hace en silos
- individuos no hablan entre sí con regularidad
- individuos no trabajan juntos en las ramas
- personas no hablan de sus cambios hasta la integración
Mucho de esto no es una técnica problema, pero un problema social. Mucho de esto se puede resolver mediante el uso de un buen rastreador de problemas fuertemente relacionado con el control de versiones, como el de Github. El principal cambio es:
- ramas deben ser de características definidas
- desarrolladores deben informar de un problema antes ir fuera y hacer un montón de trabajo
- nadie "posee" una característica (aunque puedan ser responsable de ello)
Desafortunadamente, el segundo es desanimado por la mayoría de las políticas de seguimiento de errores del proyecto. El impulso de tener un parche listo antes de informar un error es muy fuerte.
La buena administración de la sucursal requiere una buena socialización que se ve facilitada por un buen rastreador de problemas con una fuerte integración de control de versiones y una política de bienvenida.
Puede eliminar la rama una vez que haya terminado, ¿no? ('git branch -d') –
Sí, la sucursal de git -d es siempre segura, no puede perder ninguna revisión que posteriormente pueda ser recogida de basura. git branch -D eliminará incluso las ramas que contienen cambios que no se encuentran en ningún otro lado. Esto es útil sobre todo cuando ha determinado que un enfoque era un callejón sin salida completo. Dado lo barato que es el espacio en disco, probablemente no le convenga usar git branch -D – tialaramex
. Puede ser útil recordar que una rama es simplemente un puntero a una confirmación. Una vez que haya terminado de trabajar en una sucursal y haya combinado esa confirmación, ya no tendrá que señalarla. – Cascabel