J'utilise Git depuis un certain temps maintenant, et j'ai récemment commencé à l'utiliser pour baliser mes versions afin que je puisse plus facilement suivre les changements et être en mesure de voir quelle version chacun de nos clients exécute (malheureusement, le code exige actuellement que chaque client ait sa propre copie du site PHP; je change cela, mais c'est lent).
En tout cas, nous commençons à créer une certaine dynamique, je pensais que ce serait vraiment bien de pouvoir montrer aux gens ce qui a changé depuis la dernière version. Le problème est que je n'ai pas tenu de journal des modifications parce que je n'ai pas une bonne idée de la façon de procéder. Pour ce moment particulier, je peux parcourir le journal et en créer un manuellement, mais cela se fatiguera très rapidement.
J'ai essayé de googler "git changelog" et "git manage changelog" mais je n'ai rien trouvé qui parlait vraiment du flux de travail des changements de code et de la façon dont cela coïncide avec le changelog. Nous suivons actuellement le flux de travail de développement de Rein Henrichs et j'aimerais quelque chose qui va avec.
Existe-t-il une approche standard qui me manque, ou s'agit-il d'un domaine où chacun fait son propre travail?
Merci beaucoup pour vos commentaires / réponses!
--graph
, qui vous montre visuellement les branches sur lesquelles les validations sont activées.git log
sortie dans le journal des modifications n'a aucun sens. Vous devez effectuer un travail de filtrage et d'édition pour avoir un journal des modifications lisible, sinon, pourquoi auriez-vous même besoin d'un journal des modifications? Je pense que vous pouvez automatiser la génération d'un journal des modifications, mais ne faites pas de copie brute degit log
!Vous pouvez utiliser une saveur de git log pour vous aider:
Si vous nommez bien vos branches, de sorte qu'une fusion vers master apparaisse comme quelque chose comme "Fobar de fonctionnalité de branche fusionnée", vous pouvez raccourcir les choses en affichant uniquement ce message, et pas tous les petits commits que vous avez fusionnés, qui forment ensemble le fonctionnalité:
Vous pourrez peut-être augmenter cela avec un script de votre choix, qui pourrait faire des choses comme supprimer les bits de "branche fusionnée", normaliser le formatage, etc. À un moment donné, vous devez bien sûr l'écrire vous-même.
Ensuite, vous pouvez créer une nouvelle section pour le journal des modifications une fois par version:
et validez-le dans votre version.
Si votre problème est que ces sujets de validation ne ressemblent en rien à ce que vous voudriez mettre dans un journal des modifications, vous avez à peu près deux options: continuez à tout faire manuellement (et essayez de le suivre plus régulièrement au lieu de jouer à catch- au moment de la sortie), ou corrigez votre style de message de validation. Une option, si les sujets ne vont pas le faire pour vous, serait de placer des lignes comme "change: foobar de fonctionnalité ajoutée" dans le corps de vos messages de commit, afin que plus tard vous puissiez faire quelque chose comme
git log --pretty=%B | grep ^change:
pour ne saisir que ces super -bits importants des messages.Je ne sais pas vraiment combien plus que ce git pourrait vraiment vous aider à créer vos changelogs. J'ai peut-être mal interprété ce que vous entendez par «gérer»?
la source
AVERTISSEMENT: je suis l'auteur de gitchangelog dont je parlerai dans la suite.
TL; DR: Vous voudrez peut-être vérifier le propre changelog de gitchangelog ou la sortie ascii qui a généré le précédent.
Si vous souhaitez générer un journal des modifications à partir de votre historique git, vous devrez probablement considérer:
En option, vous voudrez peut-être une catégorisation (nouvelles choses, modifications, corrections de bugs) ...
Avec tout cela à l'esprit, j'ai créé et utilisé gitchangelog . Il est destiné à tirer parti d'une convention de message git commit pour atteindre tous les objectifs précédents.
Avoir une convention de message de validation est obligatoire pour créer un joli journal des modifications (avec ou sans utilisation
gitchangelog
).validation de la convention de message
Voici des suggestions sur ce qui pourrait être utile de penser à ajouter dans vos messages de validation.
Vous voudrez peut-être séparer grossièrement vos commits en grandes sections:
De plus, vous pouvez vouloir marquer certains commits:
Essayez d'écrire votre message de validation en ciblant les utilisateurs (fonctionnalité) aussi souvent que possible.
exemple
C'est standard
git log --oneline
pour montrer comment ces informations pourraient être stockées:Donc, si vous l'avez remarqué, le format que j'ai choisi est:
Pour voir un résultat de sortie réel, vous pouvez regarder la fin de la page PyPI de gitchangelog
Pour voir une documentation complète de ma convention de message de validation, vous pouvez voir le fichier de référence gitchangelog.rc.reference
Comment générer un changelog exquis à partir de cela
Ensuite, il est assez facile de créer un journal des modifications complet. Vous pouvez faire votre propre script assez rapidement, ou utiliser
gitchangelog
.gitchangelog
générera un journal des modifications complet (avec un support de sectionnement commeNew
,Fix
...), et est raisonnablement configurable selon vos propres conventions de validation. Il prend en charge tout type de sortie grâce à Templating à traversMustache
,Mako templating
et dispose d' un moteur hérité par défaut écrit en python brut; tous les 3 moteurs actuels ont des exemples de la façon de les utiliser et peuvent générer des journaux de modifications comme celui affiché sur la page PyPI de gitchangelog.Je suis sûr que vous savez qu'il ya beaucoup d'autres
git log
àchangelog
outils là - bas aussi.la source
Un plus au point CHANGELOG. Dites-moi si vous aimez ça.
la source
--format
, comme expliqué dans git-scm.com/docs/git-log#_pretty_formatsLe
gitlog-to-changelog
script est pratique pour générer un style GNUChangeLog
.Comme indiqué par
gitlog-to-changelog --help
, vous pouvez sélectionner les validations utilisées pour générer unChangeLog
fichier en utilisant soit l'option--since
:ou en passant des arguments supplémentaires après
--
, qui seront passés àgit-log
(appelés en interne pargitlog-to-changelog
):Par exemple, j'utilise la règle suivante au niveau supérieur
Makefile.am
de l'un de mes projets:Cette règle est utilisée au moment de la publication pour mettre à jour
ChangeLog
avec les derniers messages de validation non encore enregistrés. Le fichier.last-cl-gen
contient l'identifiant SHA1 du dernier commit enregistréChangeLog
et est stocké dans le référentiel Git.ChangeLog
est également enregistré dans le référentiel, de sorte qu'il peut être édité (par exemple pour corriger les fautes de frappe) sans altérer les messages de validation.la source
Étant donné que la création d'une balise par version est la meilleure pratique, vous souhaiterez peut-être partitionner votre journal des modifications par version. Dans ce cas, cette commande pourrait vous aider:
la source
Pour les projets GitHub , cela pourrait être utile: github-changelog-generator
Il génère le journal des modifications à partir des problèmes fermés des balises et des demandes d'extraction fusionnées.
Ce CHANGELOG.md été généré par ce script.
Exemple:
la source
J'ai aussi fait une bibliothèque pour ça. Il est entièrement configurable avec un modèle Moustache. Qui peut:
J'ai aussi fait:
Plus de détails sur Github: https://github.com/tomasbjerre/git-changelog-lib
Depuis la ligne de commande:
Ou à Jenkins:
la source
C'est ce que j'aime utiliser. Il obtient tous les commits depuis la dernière balise.
cut
se débarrasse du hachage de validation. Si vous utilisez des numéros de ticket au début de vos messages de validation, ils sont regroupés avecsort
. Tri aide également si vous préfixer certains commits avecfix
,typo
etc.la source
Je laisse le serveur CI diriger les éléments suivants dans un fichier nommé
CHANGELOG
pour chaque nouvelle version avec la date définie dans le nom du fichier de version:la source
Pour un journal des modifications de style GNU , j'ai préparé la fonction
Avec ça:
gnuc
et maintenant mon presse-papiers contient quelque chose comme:
Ensuite, j'utilise le presse-papiers comme point de départ pour mettre à jour le ChangeLog.
Ce n'est pas parfait (par exemple, les fichiers doivent être relatifs à leur chemin ChangeLog, donc
python/py-symtab.c
sansgdb/
puisque je vais éditer legdb/ChangeLog
), mais c'est un bon point de départ.Scripts plus avancés:
Je dois cependant être d'accord avec Tromey: la duplication des données de git commit dans le ChangeLog est inutile.
Si vous allez créer un journal des modifications, faites-en un bon résumé de ce qui se passe, éventuellement comme spécifié sur http://keepachangelog.com/
la source
Basé sur bithavoc , il répertorie le
last tag
jusqu'àHEAD
. Mais j'espère lister les logs entre 2 balises.Liste les journaux entre 2 balises.
Par exemple, il répertorie les journaux de
v1.0.0
àv1.0.1
.la source