He estado usando un repositorio git local interactuando con el repositorio CVS de mi grupo durante varios meses, ahora. He hecho un número casi neurótico de ramas, la mayoría de las cuales afortunadamente se han fusionado nuevamente en mi tronco. Pero nombrar está empezando a convertirse en un problema. Si tengo una tarea fácilmente nombrada con una etiqueta simple, pero la llevo a cabo en tres etapas, cada una de las cuales incluye su propia rama y una situación de fusión, entonces puedo repetir el nombre de la rama cada vez, pero eso hace que la historia sea un poco confusa. Si me vuelvo más específico en los nombres, con una descripción separada para cada etapa, entonces los nombres de las ramas comienzan a ser largos y difíciles de manejar.
Aprendí mirando a través de viejos hilos aquí que podría comenzar a nombrar ramas con un / en el nombre, es decir, tema / tarea, o algo así. Puedo comenzar a hacer eso y ver si ayuda a mantener las cosas mejor organizadas.
¿Cuáles son algunas de las mejores prácticas para nombrar ramas git?
Editar: Nadie ha sugerido realmente ninguna convención de nomenclatura. Borro ramas cuando termino con ellas. Simplemente tengo varios alrededor debido a que la gerencia ajusta constantemente mis prioridades. :) Como ejemplo de por qué podría necesitar más de una rama en una tarea, supongamos que necesito comprometer el primer hito discreto en la tarea al repositorio CVS del grupo. En ese momento, debido a mi interacción imperfecta con CVS, realizaría ese commit y luego mataría esa rama. (He visto demasiada rareza interactuando con CVS si trato de seguir usando la misma rama en ese punto).
fuente
KEY-1234/allow-users-to-do-smart-stuff
Respuestas:
Aquí hay algunas convenciones de nombres de sucursales que uso y las razones por las cuales
Convenciones de denominación de sucursales
Fichas de grupo
Use tokens de "agrupación" delante de los nombres de sus sucursales.
Los grupos se pueden nombrar como desee para que coincida con su flujo de trabajo. Me gusta usar sustantivos cortos para los míos. Siga leyendo para obtener más claridad.
Fichas cortas bien definidas
Elija tokens cortos para que no agreguen demasiado ruido a cada uno de los nombres de sus sucursales. Yo uso estos:
Cada uno de estos tokens se puede utilizar para indicarle a qué parte de su flujo de trabajo pertenece cada rama.
Parece que tiene varias ramas para diferentes ciclos de un cambio. No sé cuáles son sus ciclos, pero supongamos que son 'nuevos', 'probados' y 'verificados'. Puede nombrar sus ramas con versiones abreviadas de estas etiquetas, siempre escritas de la misma manera, para agruparlas y recordarle en qué etapa se encuentra.
Puede saber rápidamente qué ramas han alcanzado cada etapa diferente, y puede agruparlas fácilmente usando las opciones de coincidencia de patrones de Git.
Usa barras para separar las partes
Puede usar la mayoría de los delimitadores que desee en los nombres de las ramas, pero creo que las barras son las más flexibles. Es posible que prefiera usar guiones o puntos. Pero las barras le permiten cambiar el nombre de una rama al empujar o buscar a / desde un control remoto.
Para mí, las barras también funcionan mejor para la expansión de pestañas (finalización de comandos) en mi shell. De la manera que lo configuré, puedo buscar ramas con diferentes subpartes escribiendo los primeros caracteres de la parte y presionando la tecla TAB. Zsh luego me da una lista de ramas que coinciden con la parte del token que he escrito. Esto funciona tanto para los tokens anteriores como para los incrustados.
(Zshell es muy configurable sobre la finalización de comandos y también podría configurarlo para manejar guiones, guiones bajos o puntos de la misma manera. Pero elijo no hacerlo).
También te permite buscar ramas en muchos comandos git, como este:
Advertencia: como Slipp señala en los comentarios, las barras pueden causar problemas. Debido a que las ramas se implementan como rutas, no puede tener una rama llamada "foo" y otra rama llamada "foo / bar". Esto puede ser confuso para los nuevos usuarios.
No use números desnudos
No utilice el uso de números desnudos (o números hexadecimales) como parte de su esquema de nombres de sucursal. Dentro de la expansión de tabulación de un nombre de referencia, git puede decidir que un número es parte de un sha-1 en lugar de un nombre de rama. Por ejemplo, mi rastreador de problemas nombra errores con números decimales. Nombre mis ramas relacionadas CRnnnnn en lugar de solo nnnnn para evitar confusiones.
Si intentara expandir solo 15032, git no estaría seguro de si quería buscar SHA-1 o nombres de sucursales, y mis opciones serían algo limitadas.
Evite nombres largos y descriptivos
Los nombres largos de sucursal pueden ser muy útiles cuando está mirando una lista de sucursales. Pero puede interferir cuando se observan registros de una línea decorados, ya que los nombres de las ramas pueden consumir la mayor parte de la línea y abreviar la parte visible del registro.
Por otro lado, los nombres de rama largos pueden ser más útiles en "commit de fusión" si no los reescribe habitualmente a mano. El mensaje predeterminado de confirmación de fusión es
Merge branch 'branch-name'
. Puede que le resulte más útil que aparezcan mensajes de combinación como enMerge branch 'fix/CR15032/crash-when-unformatted-disk-inserted'
lugar de soloMerge branch 'fix/CR15032'
.fuente
bug/20574/frabnotz-finder
ybug/20424
es que una vez que comienzas sin un token secundario, no puedes agregar uno más tarde y viceversa. EG: Si crea unabug/20424
rama, no puede crear unabug/20424/additional-fixing
rama más tarde (a menos que elimine labug/20424
rama). Del mismo modo, sibug/20574/frabnotz-finder
ya es una rama, no puede crear unabug/20574
rama. Tiendo a usar un delimitador que no sea sub-token en casos como este (por ejemplobug/20574_frabnotz-finder
), o elegir un nombre predeterminado para el sub-token (por ejemplobug/20424/main
).feature
grupo y unbug
grupo, expandible para mostrarfoo
,bar
etiquetas para el primero y a20574
,20592
grupos y20424
,21334
etiquetas para el segundo.git branch -a
, y obteniendoremotes/origin/master
, etc. Cuando veo que git me cuenta acerca de una rama, no utilizo barras diagonales, y cuando veo una, sé que es una referencia "especial".Un exitoso modelo de ramificación Git de Vincent Driessen tiene buenas sugerencias. Una foto está abajo. Si este modelo de ramificación le atrae, considere la extensión de flujo a git . Otros han comentado sobre el flujo
El modelo de Driessen incluye
Una rama maestra, utilizada solo para la liberación. Nombre tipico
master
.Una rama "desarrollada" de esa rama. Ese es el que se usa para la mayoría de los trabajos de línea principal. Comúnmente nombrado
develop
.Múltiples ramas de características fuera de la rama de desarrollo. Nombre basado en el nombre de la función. Estos se fusionarán nuevamente en el desarrollo, no en las ramas maestras o de lanzamiento.
Libere la rama para mantener las versiones candidatas, con solo correcciones de errores y sin nuevas características. Nombre tipico
rc1.1
.Las revisiones son ramas de corta duración para los cambios que provienen del maestro y entrarán en el maestro sin que la rama de desarrollo esté involucrada.
fuente
Mi preferencia personal es eliminar el nombre de la sucursal después de haber terminado con una rama de tema.
En lugar de tratar de usar el nombre de la rama para explicar el significado de la rama, empiezo la línea de asunto del mensaje de confirmación en la primera confirmación en esa rama con "Rama:" e incluyo más explicaciones en el cuerpo del mensaje si el asunto No me da suficiente espacio.
El nombre de la rama en mi uso es simplemente un identificador para referirse a una rama de tema mientras se trabaja en ella. Una vez que el trabajo sobre la rama del tema ha concluido, me deshago del nombre de la rama, a veces etiquetando el commit para referencia posterior.
Eso también hace que la salida sea
git branch
más útil: solo enumera ramas de larga duración y ramas de temas activos, no todas las ramas.fuente
He mezclado y emparejado de diferentes esquemas que he visto y basado en las herramientas que estoy usando.
Entonces mi nombre completo de la sucursal sería:
que se traduciría a:
Las partes están separadas por barras diagonales porque se interpretan como carpetas en SourceTree para facilitar la organización. Usamos Jira para nuestro seguimiento de problemas, por lo que incluir el número facilita la búsqueda en el sistema. Incluir ese número también hace que se pueda buscar al intentar encontrar ese problema dentro de Github al intentar enviar una solicitud de extracción.
fuente
name/feature/issue-tracker-number-short-description
¿Por qué se necesitan tres ramas / fusiones para cada tarea? ¿Puedes explicar más sobre eso?
Si usa un sistema de seguimiento de errores, puede usar el número de error como parte del nombre de la sucursal. Esto mantendrá los nombres de las ramas únicos, y puede agregarles un prefijo con una palabra breve y descriptiva o dos para que sean legibles por humanos, como
"ResizeWindow-43523"
. También ayuda a facilitar las cosas cuando va a limpiar ramas, ya que puede buscar el error asociado. Así es como suelo nombrar mis ramas.Dado que estas ramas eventualmente se fusionan nuevamente en master, debería estar seguro de eliminarlas después de fusionarlas. A menos que se esté fusionando
--squash
, toda la historia de la sucursal seguirá existiendo si alguna vez la necesita.fuente
Tenga en cuenta que, como se ilustra en commit e703d7 o commit b6c2a0d (marzo de 2014), ahora parte de Git 2.0, encontrará otra convención de nomenclatura (que puede aplicar a las sucursales).
El nombre de una sucursal no puede tener espacio (consulte " ¿Qué caracteres son ilegales dentro de un nombre de sucursal? " Y la
git check-ref-format
página del manual ).Por lo tanto, para cada nombre de rama que estaría representado por una expresión de varias palabras, usar una '
-
' (guión) como separador es una buena idea.fuente
Siguiendo la sugerencia de farktronix, hemos estado usando números de boletos de Jira para similares en mercurial, y planeo continuar usándolos para las ramas de git. Pero creo que el número de boleto en sí es probablemente lo suficientemente único. Si bien puede ser útil tener una palabra descriptiva en el nombre de la sucursal como lo señaló farktronix, si cambia de sucursal con la frecuencia suficiente, probablemente desee escribir menos. Luego, si necesita saber el nombre de la sucursal, busque en Jira las palabras clave asociadas en el ticket si no lo sabe. Además, debe incluir el número de ticket en cada comentario.
Si su rama representa una versión, parece que la convención común es usar el formato xxx (ejemplo: "1.0.0") para nombres de rama y vx.xx (ejemplo "v1.0.0") para nombres de etiqueta (para evitar conflictos) . Ver también: is-there-an-standard-naming-convention-for-git-tags
fuente
v1.2.4
rama eventualmente conduzca a un punto final con unav1.2.4
etiqueta (¿estoy en lo cierto al suponer que esta es la situación en la que ambos nombran ramas y etiquetas después de una versión) , entonces, ¿importa? Todavía se puede llegar arefs/tags/v1.2.4
la etiqueta y a la rama enrefs/heads/v1.2.4
, y parece que Git preferirá el nombre de la etiqueta cuando sea ambiguo (con una advertencia).