Korzystam z Git od jakiegoś czasu, a ostatnio zacząłem używać go do oznaczania swoich wydań, aby móc łatwiej śledzić zmiany i zobaczyć, która wersja jest uruchomiona przez każdego z naszych klientów (niestety kod obecnie nakazuje że każdy klient ma własną kopię strony PHP; Zmieniam to, ale jest powolna).
W każdym razie zaczynamy nabierać rozpędu. Pomyślałem, że dobrze byłoby pokazać ludziom, co się zmieniło od ostatniego wydania. Problem polega na tym, że nie prowadziłem dziennika zmian, ponieważ nie mam pojęcia, jak sobie z tym poradzić. W tym konkretnym czasie mogę uruchomić dziennik i ręcznie go utworzyć, ale to bardzo szybko się męczy.
Próbowałem googlingu „git changelog” i „git manage changelog”, ale nie znalazłem niczego, co naprawdę mówiłoby o przepływie zmian w kodzie i tym, jak to się pokrywa z dziennikiem zmian. Obecnie śledzimy przebieg prac rozwojowych Reina Henrichsa i bardzo bym chciał, aby coś takiego się stało.
Czy brakuje mi standardowego podejścia, czy jest to dziedzina, w której każdy robi swoje?
Bardzo dziękuję za komentarze i odpowiedzi!
--graph
, który wizualnie pokazuje, na których gałęziach znajdują się zatwierdzenia.git log
danych wyjściowych do dziennika zmian nie ma sensu. Musisz wykonać prace związane z filtrowaniem i edycją, aby mieć czytelny dziennik zmian, w przeciwnym razie, dlaczego miałbyś w ogóle potrzebować dziennika zmian? Myślę, że możesz zautomatyzować generowanie dziennika zmian, ale nie rób surowej kopiigit log
!Możesz użyć jakiegoś smaku dziennika git, aby ci pomóc:
Jeśli ładnie nazywasz swoje gałęzie, aby scalenie do opanowania pojawiło się jako coś w rodzaju „Fobar połączonej gałęzi”, możesz skrócić rzeczy, pokazując tylko tę wiadomość, a nie wszystkie małe zmiany, które scaliłeś, które razem tworzą funkcja:
Być może będziesz w stanie rozszerzyć to za pomocą własnego skryptu, który może na przykład usuwać bity „Scalonej gałęzi”, normalizować formatowanie itp. W pewnym momencie oczywiście musisz to napisać sam.
Następnie możesz utworzyć nową sekcję dla dziennika zmian raz dla każdej wersji:
i zatwierdzić to w swojej wersji zatwierdzić wydanie.
Jeśli Twoim problemem jest to, że podmioty zatwierdzające nie przypominają tego, co chciałbyś umieścić w dzienniku zmian, masz prawie dwie opcje: rób wszystko ręcznie (i staraj się nadążyć za nim częściej niż grać w catch- w momencie wydania) lub napraw styl komunikatu zatwierdzenia. Jedną opcją, jeśli badani nie zamierzają tego zrobić dla ciebie, byłoby umieszczenie wierszy typu „zmień: dodany foobar funkcji” w treści wiadomości zatwierdzających, abyś później mógł zrobić coś takiego,
git log --pretty=%B | grep ^change:
aby złapać tylko te super ważne bity wiadomości.Nie jestem do końca pewien, o ile więcej niż ten git może naprawdę pomóc w tworzeniu dzienników zmian. Może źle zrozumiałem, co rozumiesz przez „zarządzać”?
źródło
ZASTRZEŻENIE: Jestem autorem gitchangelog, o którym będę mówić poniżej.
TL; DR: Może chcesz sprawdzić własny dziennik zmian gitchangeloga lub wyjście ascii, które wygenerowało poprzednie.
Jeśli chcesz wygenerować dziennik zmian z historii git, prawdopodobnie będziesz musiał rozważyć:
Opcjonalnie możesz potrzebować jakiejś kategoryzacji (nowe rzeczy, zmiany, poprawki błędów) ...
Mając to na uwadze, stworzyłem i używam gitchangelog . Ma to na celu wykorzystanie konwencji komunikatów git commit do osiągnięcia wszystkich poprzednich celów.
Posiadanie konwencji zatwierdzania jest obowiązkowe, aby utworzyć fajny dziennik zmian (z użyciem lub bez
gitchangelog
).zatwierdzenie konwencji wiadomości
Poniżej znajdują się sugestie, co może być przydatne, aby pomyśleć o dodawaniu wiadomości zatwierdzania.
Możesz z grubsza podzielić swoje zobowiązania na duże sekcje:
Dodatkowo możesz chcieć oznaczyć niektóre zatwierdzenia:
Spróbuj napisać komunikat zatwierdzenia, kierując reklamy do użytkowników (funkcjonalność) tak często, jak to możliwe.
przykład
Jest to standard
git log --oneline
pokazujący, jak te informacje mogą być przechowywane:Jeśli więc zauważyłeś, wybrałem format:
Aby zobaczyć rzeczywisty wynik wyjściowy, możesz spojrzeć na koniec strony PyPI gitchangelog
Aby zobaczyć pełną dokumentację mojej konwencji komunikatów zatwierdzania, możesz zobaczyć plik referencyjny gitchangelog.rc.reference
Jak wygenerować z tego znakomity dziennik zmian
Wówczas całkiem łatwo jest stworzyć kompletny dziennik zmian. Możesz zrobić własny skrypt dość szybko lub użyć
gitchangelog
.gitchangelog
wygeneruje pełny changelog (ze skrawków jako wsparcieNew
,Fix
...), i jest rozsądnie konfigurować do własnych konwencji popełniających. Obsługuje wszelkiego rodzaju wyjściowych dzięki templating przezMustache
,Mako templating
i ma domyślną starszego napisany w Pythonie surowego; wszystkie obecne 3 silniki mają przykłady ich użycia i mogą wyświetlać dziennik zmian, jak ten wyświetlany na stronie PyPI w gitchangelogu.Jestem pewien, że wiesz, że istnieje wiele innych
git log
dochangelog
narzędzi tam również.źródło
Bardziej do rzeczy CHANGELOG. Powiedz mi, jeśli ci się spodoba.
źródło
--format
, jak wyjaśniono w git-scm.com/docs/git-log#_pretty_formatsgitlog-to-changelog
Skrypt jest przydatna do wygenerowania GNU styluChangeLog
.Jak pokazuje
gitlog-to-changelog --help
, możesz wybrać zatwierdzenia użyte do wygenerowaniaChangeLog
pliku, korzystając z jednej z opcji--since
:lub przekazując dodatkowe argumenty później
--
, które zostaną przekazanegit-log
(wywołane wewnętrznie przezgitlog-to-changelog
):Na przykład używam następującej reguły na najwyższym poziomie
Makefile.am
jednego z moich projektów:Ta reguła jest używana w momencie wydania do aktualizacji
ChangeLog
najnowszymi, jeszcze nie nagranymi komunikatami zatwierdzenia. Plik.last-cl-gen
zawiera identyfikator SHA1 najnowszego zatwierdzenia zapisanego wChangeLog
i jest przechowywany w repozytorium Git.ChangeLog
jest również zapisywany w repozytorium, dzięki czemu można go edytować (np. w celu poprawienia literówek) bez zmiany komunikatów zatwierdzania.źródło
Ponieważ tworzenie tagów dla poszczególnych wersji jest najlepszą praktyką, możesz podzielić dziennik zmian na partycje według wersji. W takim przypadku to polecenie może ci pomóc:
źródło
Dla projektach GitHub może się przydać: github-changelog-generator
Generuje dziennik zmian na podstawie zamkniętych tagów i połączonych żądań ściągania.
To CHANGELOG.md został wygenerowany przez ten skrypt.
Przykład:
źródło
Zrobiłem też bibliotekę do tego. Jest w pełni konfigurowalny z szablonem Wąsy. To może:
Wykonałem również:
Więcej informacji na temat Github: https://github.com/tomasbjerre/git-changelog-lib
Z linii poleceń:
Lub w Jenkins:
źródło
To jest to, co lubię używać. Pobiera wszystkie zatwierdzenia od ostatniego tagu.
cut
pozbywa się skrótu zatwierdzenia. Jeśli użyjesz numerów biletów na początku wiadomości zatwierdzenia, zostaną one pogrupowane wedługsort
. Sortowanie również pomaga, jeśli prefiks niektóre z zobowiązujefix
,typo
itpźródło
Zezwalam serwerowi CI przesyłać następujące elementy do pliku o nazwie
CHANGELOG
dla każdego nowego wydania z datą ustawioną w nazwie pliku wydania:źródło
Dla dziennika zmian w stylu GNU przygotowałem tę funkcję
Z tym:
gnuc
a teraz mój schowek zawiera coś takiego:
Następnie używam schowka jako punktu początkowego do aktualizacji ChangeLog.
Nie jest doskonały (np. Pliki powinny być względne do ścieżki ChangeLog, więc
python/py-symtab.c
bez,gdb/
ponieważ będę edytowaćgdb/ChangeLog
), ale jest dobrym punktem wyjścia.Bardziej zaawansowane skrypty:
Muszę jednak zgodzić się z Tromeyem: powielanie danych git commit w dzienniku zmian jest bezużyteczne.
Jeśli masz zamiar zrobić dziennik zmian, zrób z niego dobre podsumowanie tego, co się dzieje, możliwie jak podano na stronie http://keepachangelog.com/
źródło
Na podstawie bithavoc , to wymienia
last tag
ażHEAD
. Mam jednak nadzieję, że wymienię dzienniki między 2 tagami.Wyświetl dzienniki między 2 tagami.
Na przykład wyświetli dzienniki od
v1.0.0
dov1.0.1
.źródło