He estado usando Git durante un tiempo, y recientemente comencé a usarlo para etiquetar mis lanzamientos para poder hacer un seguimiento más fácil de los cambios y poder ver qué versión están ejecutando cada uno de nuestros clientes (desafortunadamente el código actualmente exige que cada cliente tiene su propia copia del sitio PHP; estoy cambiando esto, pero es lento).
En cualquier caso, estamos comenzando a generar algo de impulso, pensé que sería realmente bueno poder mostrarle a la gente lo que ha cambiado desde el último lanzamiento. El problema es que no he mantenido un registro de cambios porque no tengo una buena idea de cómo hacerlo. Para este momento en particular, puedo ejecutar el registro y crear uno manualmente, pero eso se cansará muy rápidamente.
Intenté buscar en Google "git changelog" y "git manage changelog", pero no encontré nada que realmente hablara sobre el flujo de trabajo de los cambios de código y cómo eso coincide con el registro de cambios. Actualmente estamos siguiendo el flujo de trabajo de desarrollo de Rein Henrichs y me encantaría algo que acompañara a eso.
¿Existe un enfoque estándar que me estoy perdiendo o es un área en la que todos hacen lo suyo?
Muchas gracias por sus comentarios / respuestas!
--graph
, que muestra visualmente en qué ramas están las confirmaciones.git log
salida al registro de cambios no tiene sentido. Necesita hacer un trabajo de filtrado y edición para tener un registro de cambios legible, de lo contrario, ¿por qué necesitaría un registro de cambios? Creo que puede automatizar la generación de un registro de cambios, ¡pero no haga una copia en bruto degit log
!Puedes usar un poco de sabor de git log para ayudarte:
Si nombra sus ramas muy bien, de modo que una combinación de master se muestre como algo así como "Función de rama combinada-foobar", puede acortar las cosas solo mostrando ese mensaje, y no todas las pequeñas confirmaciones que combinó, que juntas forman el característica:
Es posible que pueda aumentar esto con un script propio, que podría hacer cosas como eliminar los bits de "Rama fusionada", normalizar el formato, etc. Sin embargo, en algún momento debe escribirlo usted mismo, por supuesto.
Luego, podría crear una nueva sección para el registro de cambios una vez por versión:
y confirme eso en su versión de lanzamiento de confirmación.
Si su problema es que esos temas de compromiso no se parecen en nada a lo que le gustaría poner en un registro de cambios, tiene dos opciones: seguir haciendo todo manualmente (e intentar mantenerse al día con más frecuencia en lugar de jugar catch- en el momento del lanzamiento), o arregle su estilo de mensaje de confirmación. Una opción, si los sujetos no lo van a hacer por usted, sería colocar líneas como "cambio: función adicional foobar" en los cuerpos de sus mensajes de confirmación, para que luego pueda hacer algo como
git log --pretty=%B | grep ^change:
capturar solo esos súper - bits importantes de los mensajes.No estoy completamente seguro de cuánto más que ese git realmente podría ayudarlo a crear sus registros de cambios. ¿Tal vez he malinterpretado lo que quieres decir con "administrar"?
fuente
DESCARGO DE RESPONSABILIDAD: Soy el autor de gitchangelog del que hablaré a continuación.
TL; DR: es posible que desee comprobar el registro de cambios propio de gitchangelog o la salida ascii que generó el anterior.
Si desea generar un registro de cambios a partir de su historial de git, probablemente tenga que considerar:
Opcionalmente, es posible que desee alguna categorización (cosas nuevas, cambios, correcciones de errores) ...
Con todo esto en mente, creé y utilizo gitchangelog . Está destinado a aprovechar una convención de mensajes de compromiso de git para lograr todos los objetivos anteriores.
Tener una convención de mensajes de compromiso es obligatorio para crear un buen registro de cambios (con o sin usar
gitchangelog
).convención de mensaje de compromiso
Las siguientes son sugerencias de lo que podría ser útil pensar en agregar en sus mensajes de confirmación.
Es posible que desee separar aproximadamente sus confirmaciones en grandes secciones:
Además, es posible que desee etiquetar algunas confirmaciones:
Intente escribir su mensaje de confirmación dirigiéndose a los usuarios (funcionalidad) con la mayor frecuencia posible.
ejemplo
Esto es estándar
git log --oneline
para mostrar cómo se puede almacenar esta información ::Entonces, si te has dado cuenta, el formato que elegí es:
Para ver un resultado de salida real, puede mirar al final de la página PyPI de gitchangelog
Para ver una documentación completa de mi convención de mensajes de confirmación, puede ver el archivo de referencia gitchangelog.rc.reference
Cómo generar un registro de cambios exquisito a partir de esto
Entonces, es bastante fácil hacer un registro de cambios completo. Podrías hacer tu propio script bastante rápido o usarlo
gitchangelog
.gitchangelog
generará un registro de cambios completo (con soporte de seccionamiento comoNew
,Fix
...), y es razonablemente configurable para sus propias convenciones de compromiso. Es compatible con cualquier tipo de producción gracias a templating a travésMustache
,Mako templating
y tiene un motor de herencia predeterminado escrito en Python prima; Todos los 3 motores actuales tienen ejemplos de cómo usarlos y pueden generar registros de cambios como el que se muestra en la página PyPI de gitchangelog.Estoy seguro de que sé que hay un montón de otros
git log
achangelog
herramientas por ahí también.fuente
Un cambio más al punto. Dime si a ustedes les gusta.
fuente
--format
, como se explica en git-scm.com/docs/git-log#_pretty_formatsEl
gitlog-to-changelog
script es útil para generar un estilo GNUChangeLog
.Como se muestra
gitlog-to-changelog --help
, puede seleccionar las confirmaciones utilizadas para generar unChangeLog
archivo con la opción--since
:o pasando argumentos adicionales después
--
, que serán pasados agit-log
(llamados internamente porgitlog-to-changelog
):Por ejemplo, estoy usando la siguiente regla en el nivel superior
Makefile.am
de uno de mis proyectos:Esta regla se usa en el momento del lanzamiento para actualizar
ChangeLog
con los últimos mensajes de confirmación aún no grabados. El archivo.last-cl-gen
contiene el identificador SHA1 de la última confirmación registradaChangeLog
y se almacena en el repositorio de Git.ChangeLog
también se registra en el repositorio, para que pueda editarse (por ejemplo, para corregir errores tipográficos) sin alterar los mensajes de confirmación.fuente
Dado que la mejor práctica es crear una etiqueta por versión, es posible que desee particionar su registro de cambios por versión. En ese caso, este comando podría ayudarlo a:
fuente
Para proyectos de GitHub podría ser útil: github-changelog-generator
Genera un registro de cambios a partir de problemas cerrados de etiquetas y solicitudes de extracción fusionadas.
Este CHANGELOG.md fue generado por este script.
Ejemplo:
fuente
También hice una biblioteca para esto. Es totalmente configurable con una plantilla de bigote. Eso puede:
También hice:
Más detalles sobre Github: https://github.com/tomasbjerre/git-changelog-lib
Desde la línea de comando:
O en Jenkins:
fuente
Es lo que me gusta usar. Obtiene todos los commits desde la última etiqueta.
cut
se deshace del hash commit. Si usa números de ticket al comienzo de sus mensajes de confirmación, se agrupan consort
. También ayuda a clasificar Si el prefijo ciertas confirmaciones confix
,typo
, etc.fuente
Dejo que el servidor CI canalice lo siguiente en un archivo con el nombre
CHANGELOG
de cada nueva versión con la fecha establecida en el nombre de archivo de la versión:fuente
Para un registro de cambios de estilo GNU , he cocinado la función
Con este:
gnuc
y ahora mi portapapeles contiene algo como:
Luego uso el portapapeles como punto de partida para actualizar ChangeLog.
No es perfecto (por ejemplo, archivos deben estar en relación con su trayectoria de registro de cambios, por lo que
python/py-symtab.c
singdb/
ya que voy a editar elgdb/ChangeLog
), pero es un buen punto de partida.Scripts más avanzados:
Sin embargo, tengo que estar de acuerdo con Tromey: duplicar los datos de confirmación de git en ChangeLog es inútil.
Si va a hacer un registro de cambios, haga un buen resumen de lo que está sucediendo, posiblemente como se especifica en http://keepachangelog.com/
fuente
Basado en bithavoc , enumera el
last tag
hastaHEAD
. Pero espero enumerar los registros entre 2 etiquetas.Lista de registros entre 2 etiquetas.
Por ejemplo, enumerará los registros de
v1.0.0
av1.0.1
.fuente