Ich benutze Git jetzt schon eine Weile und habe kürzlich damit begonnen, meine Releases zu markieren, damit ich Änderungen leichter verfolgen und sehen kann, welche Version jeder unserer Clients ausführt (leider schreibt der Code derzeit dies vor dass jeder Client seine eigene Kopie der PHP-Site hat (ich ändere dies, aber es geht nur langsam voran).
Auf jeden Fall fangen wir an, etwas Schwung zu gewinnen. Ich dachte, es wäre wirklich gut, den Leuten zeigen zu können, was sich seit der letzten Veröffentlichung geändert hat. Das Problem ist, dass ich kein Änderungsprotokoll geführt habe, weil ich keine gute Vorstellung davon habe, wie ich vorgehen soll. Für diese bestimmte Zeit kann ich das Protokoll durchgehen und manuell eines erstellen, aber das wird sehr schnell anstrengend.
Ich habe versucht, "git changelog" und "git manage changelog" zu googeln, aber ich habe nichts gefunden, was wirklich über den Workflow von Codeänderungen und darüber, wie dies mit dem Changelog übereinstimmt, gesprochen hat. Wir verfolgen derzeit den Entwicklungsworkflow von Rein Henrichs und ich würde etwas lieben, das damit einhergeht.
Gibt es einen Standardansatz, den ich vermisse, oder ist dies ein Bereich, in dem jeder sein eigenes Ding macht?
Vielen Dank für Ihre Kommentare / Antworten!
--graph
, das Ihnen visuell anzeigt, in welchen Zweigen sich die Commits befinden.git log
Ausgabe in das Änderungsprotokoll hat keinen Sinn. Sie müssen filtern und bearbeiten, um ein lesbares Änderungsprotokoll zu erhalten. Warum benötigen Sie sonst überhaupt ein Änderungsprotokoll? Ich denke, Sie können die Erstellung eines Änderungsprotokolls automatisieren, aber bitte machen Sie keine Rohkopie davongit log
!Sie können eine Variante von Git Log verwenden, um Ihnen zu helfen:
Wenn Sie Ihre Zweige gut benennen, so dass eine Zusammenführung zum Master als "Zusammengeführte Zweig-Feature-Foobar" angezeigt wird, können Sie die Dinge verkürzen, indem Sie nur diese Nachricht anzeigen und nicht alle kleinen Commits, die Sie zusammengeführt haben und die zusammen das bilden Feature:
Möglicherweise können Sie dies mit einem eigenen Skript ergänzen, mit dem Sie beispielsweise die "Zusammengeführten Verzweigungs" -Bits entfernen, die Formatierung normalisieren usw. Irgendwann müssen Sie es natürlich selbst schreiben.
Dann können Sie einmal pro Version einen neuen Abschnitt für das Änderungsprotokoll erstellen:
und schreiben Sie das in Ihrer Version fest.
Wenn Ihr Problem darin besteht, dass diese Festschreibungsthemen nicht mit dem übereinstimmen, was Sie in ein Änderungsprotokoll aufnehmen möchten, haben Sie so ziemlich zwei Möglichkeiten: Machen Sie alles manuell (und versuchen Sie, regelmäßig damit Schritt zu halten, anstatt Catch zu spielen). zum Zeitpunkt der Veröffentlichung) oder korrigieren Sie Ihren Commit-Nachrichtenstil. Eine Option, wenn die Betreffs dies nicht für Sie tun, besteht darin, Zeilen wie "Ändern: Feature-Foobar hinzufügen" in die Textkörper Ihrer Festschreibungsnachrichten einzufügen, damit Sie später so etwas wie
git log --pretty=%B | grep ^change:
nur diese Super- Nachrichten abrufen können -wichtige Bits der Nachrichten.Ich bin mir nicht ganz sicher, wie viel mehr als dieser Git dir wirklich helfen könnte, deine Changelogs zu erstellen. Vielleicht habe ich falsch interpretiert, was Sie unter "verwalten" verstehen?
quelle
HAFTUNGSAUSSCHLUSS: Ich bin der Autor von gitchangelog, von dem ich im Folgenden sprechen werde.
TL; DR: Möglicherweise möchten Sie das eigene Änderungsprotokoll von gitchangelog oder die ASCII-Ausgabe überprüfen , die das vorherige generiert hat.
Wenn Sie ein Änderungsprotokoll aus Ihrem Git-Verlauf erstellen möchten, müssen Sie wahrscheinlich Folgendes berücksichtigen:
Optional möchten Sie vielleicht eine Kategorisierung (neue Dinge, Änderungen, Bugfixes) ...
Vor diesem Hintergrund habe ich Gitchangelog erstellt und verwendet . Es soll eine Git-Commit-Nachrichtenkonvention nutzen , um alle vorherigen Ziele zu erreichen.
Eine Konvention für Festschreibungsnachrichten ist obligatorisch, um ein schönes Änderungsprotokoll zu erstellen (mit oder ohne Verwendung
gitchangelog
).Commit-Nachrichtenkonvention
Im Folgenden finden Sie Vorschläge, wie Sie Ihre Commit-Nachrichten hinzufügen können.
Möglicherweise möchten Sie Ihre Commits grob in große Abschnitte unterteilen:
Darüber hinaus möchten Sie möglicherweise einige Commits markieren:
Versuchen Sie, Ihre Commit-Nachricht zu schreiben, indem Sie Benutzer (Funktionen) so oft wie möglich ansprechen.
Beispiel
Dies ist Standard, um
git log --oneline
zu zeigen, wie diese Informationen gespeichert werden können ::Wenn Sie es bemerkt haben, habe ich folgendes Format gewählt:
Um ein tatsächliches Ausgabeergebnis zu sehen, können Sie sich das Ende der PyPI-Seite von gitchangelog ansehen
Eine vollständige Dokumentation meiner Commit-Nachrichtenkonvention finden Sie in der Referenzdatei gitchangelog.rc.reference
Wie man daraus ein exquisites Änderungsprotokoll generiert
Dann ist es ganz einfach, ein vollständiges Änderungsprotokoll zu erstellen. Sie können Ihr eigenes Skript ziemlich schnell erstellen oder verwenden
gitchangelog
.gitchangelog
generiert ein vollständiges Änderungsprotokoll (mit Schnittunterstützung alsNew
,Fix
...) und kann angemessen nach Ihren eigenen Festschreibungskonventionen konfiguriert werden. Es unterstützt jede Art von Leistung durch Templating durchMustache
,Mako templating
und verfügt über eine Standard - Legacy - Engine in rohem Python geschrieben; Alle aktuellen 3 Engines haben Beispiele für ihre Verwendung und können Änderungsprotokolle ausgeben, wie sie auf der PyPI-Seite von gitchangelog angezeigt werden.Ich bin sicher , Sie wissen, dass es viele andere sind
git log
zuchangelog
auch Tools gibt.quelle
Ein mehr auf den Punkt CHANGELOG. Sag mir, ob es euch gefällt.
quelle
--format
, wie in git-scm.com/docs/git-log#_pretty_formatsDas
gitlog-to-changelog
Skript ist praktisch, um einen GNU-Stil zu generierenChangeLog
.Wie von gezeigt
gitlog-to-changelog --help
, können Sie die zum Generieren einerChangeLog
Datei verwendeten Commits mit einer der folgenden Optionen auswählen--since
:oder indem Sie nachher zusätzliche Argumente übergeben
--
, die angit-log
(intern aufgerufen vongitlog-to-changelog
) übergeben werden:Zum Beispiel verwende ich die folgende Regel in der obersten Ebene
Makefile.am
eines meiner Projekte:Diese Regel wird zum Zeitpunkt der Veröffentlichung verwendet, um
ChangeLog
mit den neuesten noch nicht aufgezeichneten Festschreibungsnachrichten zu aktualisieren . Die Datei.last-cl-gen
enthält die SHA1-Kennung des zuletzt festgeschriebenen CommitsChangeLog
und wird im Git-Repository gespeichert.ChangeLog
wird auch im Repository aufgezeichnet, so dass es bearbeitet werden kann (z. B. um Tippfehler zu korrigieren), ohne die Festschreibungsnachrichten zu ändern.quelle
Da das Erstellen eines Tags pro Version die beste Vorgehensweise ist, möchten Sie möglicherweise Ihr Änderungsprotokoll pro Version partitionieren. In diesem Fall kann dieser Befehl Ihnen helfen:
quelle
Für GitHub- Projekte kann es nützlich sein: github-changelog-generator
Es generiert ein Änderungsprotokoll aus geschlossenen Tags-Tags und zusammengeführten Pull-Anforderungen.
Dieser CHANGELOG.md wurde von diesem Skript generiert.
Beispiel:
quelle
Ich habe auch eine Bibliothek dafür gemacht. Es ist vollständig mit einer Moustache-Vorlage konfigurierbar. Das kann:
Ich habe auch gemacht:
Weitere Details zu Github: https://github.com/tomasbjerre/git-changelog-lib
Über die Befehlszeile:
Oder in Jenkins:
quelle
Ist das, was ich gerne benutze. Es werden alle Commits seit dem letzten Tag abgerufen.
cut
wird den Commit-Hash los. Wenn Sie zu Beginn Ihrer Festschreibungsnachrichten Ticketnummern verwenden, werden diese mit gruppiertsort
. Sortierung hilft auch , wenn Sie bestimmte Commits Präfix mitfix
,typo
etc.quelle
Ich habe den CI-Server Folgendes in eine Datei leiten lassen, die
CHANGELOG
für jede neue Version mit dem im Release-Dateinamen festgelegten Datum benannt ist:quelle
Für ein Änderungsprotokoll im GNU-Stil habe ich die Funktion gekocht
Mit diesem:
gnuc
und jetzt enthält meine Zwischenablage so etwas wie:
Dann verwende ich die Zwischenablage als Ausgangspunkt, um das ChangeLog zu aktualisieren.
Es ist nicht perfekt (z. B. sollten Dateien relativ zu ihrem ChangeLog-Pfad sein, also
python/py-symtab.c
ohne,gdb/
da ich das bearbeiten werdegdb/ChangeLog
), aber es ist ein guter Ausgangspunkt.Fortgeschrittenere Skripte:
Ich muss Tromey jedoch zustimmen: Das Duplizieren von Git-Commit-Daten im ChangeLog ist nutzlos.
Wenn Sie ein Änderungsprotokoll erstellen möchten, geben Sie eine gute Zusammenfassung der Vorgänge, möglicherweise wie unter http://keepachangelog.com/ angegeben.
quelle
Basierend auf bithavoc , listet es die
last tag
bisHEAD
. Aber ich hoffe, die Protokolle zwischen 2 Tags aufzulisten.Listen Sie Protokolle zwischen 2 Tags auf.
Beispielsweise werden Protokolle von
v1.0.0
bis aufgelistetv1.0.1
.quelle