Czy komunikat git commit powinien wspominać o zmodyfikowanym pliku?


50

W pierwszym wierszu komunikatu git commit mam zwyczaj wspominać o pliku, który został zmodyfikowany, jeśli zmiana nie obejmuje wielu plików, na przykład:

Add [somefunc] to [somefile] 

Czy to dobrze, czy jest to niepotrzebne?

Odpowiedzi:


84

Narzędzia kontroli wersji są na tyle potężne, że pozwalają zobaczyć, jakie pliki zostały zmodyfikowane i jakie metody zostały dodane. Oznacza to, że ogólnie wiadomości dziennika, które w oczywisty sposób powielają to, co już istnieje, zanieczyszczają dziennik.

Dodano somefuncmetodę spełnienia wymagania, tj .:

  • aby dodać funkcję,
  • usunąć błąd lub
  • aby refaktoryzować kod źródłowy.

Oznacza to, że komunikaty w dzienniku muszą raczej wyjaśniać, które funkcje / błędy zostały naruszone lub jaki był cel refaktoryzacji.


5
Powinien także mówić o tym, dlaczego . Jakie inne opcje rozważałeś i dlaczego wybrałeś tę?
Jay Bazuzi

2
Komentuję zatwierdzenia w taki sam sposób, jak komentuję kod, tylko z perspektywy wyższego poziomu (tj. Mniej informacji, więcej podsumowań). Osobiście dzielę go na poziom pliku / modułu (w git), ale tylko dlatego, że zatwierdzenia są tanie z góry i lubię czytać historię jak książkę. YMMV.
Evan Plaice

1
Jeśli z jakiegoś powodu osoba popełnia kilka plików, które nie są związane z tym samym błędem, wolę, aby wyświetlała nazwy plików i identyfikator błędu przed latem. Nie muszę wiedzieć, file.cpp: dodano getMethod (), ale chciałbym, żeby błąd nr 10 file.cpp: przyzwoity tutaj. Jeśli popełnią kilka plików, które są rozłożone na wiele raportów o błędach, porozmawiamy, ponieważ tak naprawdę nie lubię tego. Wolałbym, żeby popełnili wiele zmian. Jeden na każdy problem, który rozwiązują.
William

@William: Ponadto, w przypadku problemu z jedną poprawką, można ją cofnąć przy minimalnym zamieszaniu. Połącz dziesięć poprawek błędów w jednym zatwierdzeniu, co może być poważnym problemem.
David Thornley,

59

Nie. Istnieje wiele sposobów na sprawdzenie zawartości zatwierdzenia. Komentarz powinien opisywać cel zatwierdzenia.


30

Nie zapomnij dodać NUMERU BILETU / WYDANIA .

Jeśli masz jakąś funkcję lub system śledzenia problemów z biletem # lub problemem # , pamiętaj o wpisaniu tego identyfikatora # w zatwierdzeniu. Pomoże to każdemu, kto chce dowiedzieć się więcej o funkcji lub problemie, nad którym pracowałeś.

W moim ostatnim projekcie opracowano makro, aby upewnić się, że pierwsze 7 cyfr komentarza jest prawidłowym numerem wydania z jasnego poszukiwania (nasz system śledzenia problemów / funkcji).


Jak zatem dokonujesz zmiany refaktoryzacji?
Jules

Refaktoryzacja @Jules ma bilet #, który nigdy się nie kończy
Caleth

Jedną z metodologii @Jules jest to, że refaktoryzacja jest śledzona jako problem „trudny”, a więc ma również numer problemu.
Scott McIntyre,

@ScottMcIntyre Chociaż może to być prawda, nie jestem przekonany, że to dobry pomysł. Refaktoryzacja jest często najlepiej przeprowadzana oportunistycznie lub jako część procesu opracowywania kodu, który opiera się na kodzie, który ma być refaktoryzowany. Jak to ujął Fowler: „Planowane refaktoryzowanie jest [...] znakiem, że zespół nie dokonał wystarczającej refaktoryzacji przy użyciu innych przepływów pracy”. Lub bardziej otwarcie: Ron Jeffries: Refaktoryzacja - Nie zaległe! .
Jules

3

Robię tego typu rzeczy, gdy popełniam np. Naprawę wady, która wymagała zmian w wielu plikach. Ułatwia to stwierdzenie, co się zmieniło, bez patrzenia na poszczególne pliki w zestawie zmian.

W przypadku zestawów zmian pojedynczych plików jest to niepotrzebne.

Pierwszy wiersz to zawsze ogólny opis zestawu zmian, na przykład link do usterki lub historii użytkownika.


3

Jeśli jest to odpowiednia informacja w narracji komunikatu zatwierdzenia, to tak, dołącz ją. Jeśli jedynym bitem informacji jest sama nazwa pliku, to nie.

Na przykład ma to sens: „Przeniesiono funkcję build_foo () z fooutil.c do foobase.c, ponieważ większość programów, które chcą korzystać z build_foo (), już zawiera foobase.c”

Ten nie: „Zaktualizowałem build_foo () w fooutil.c, aby pobrać parametr bar.”


1

Chcę tutaj dodać inną perspektywę.

Moja odpowiedź brzmi „tak” lub „nie”, ale ogólnie powiedziałbym „tak”.

Kontrola wersji jest rzeczywiście wystarczająco potężna, aby wiedzieć, który plik jest aktualizowany. Ale kiedy to zrobimy

$ git log

Widzimy tylko komunikat zatwierdzenia. To właśnie robi większość ludzi.

Zaglądając do samego dziennika. Dodaje do tego dodatkowy kontekst. Na przykład:

readme.md: Fix typo detected by language tool

Jest lepszy niż

Fix typo detected by language tool

Jeśli jednak zmiany powodują odrodzenie wielu plików, to przynajmniej wspomnij o edytowanym komponencie.

API: Fix reset password not sent email to user

Po jego odczytaniu wiemy, że naprawiany błąd dotyczy komponentu API i prawdopodobnie znajduje się w katalogu API u podstawy kodu.

Możemy jednak zrobić

$ git show COMMIT_ID --name-only 

ale dodaje więcej kroków tylko po to, aby uzyskać pliki.


0

Jedyny raz, kiedy widziałem, że jest to przydatne w przypadku pojedynczego sprawdzania pliku, to jeśli dokonałeś zmian w funkcji używanej w wielu miejscach w pliku, w wyniku czego różnice są zaśmiecone. Nawet wtedy najpierw umieściłem numer śledzenia zmian i zwykły tekstowy opis zmiany.


-1

Myślę, że prawdziwym pytaniem jest, jak ograniczony jest zakres twoich zobowiązań? Jeśli czekasz na zatwierdzenie różnych niezwiązanych ze sobą zmian w jednym zatwierdzeniu, możesz poczuć potrzebę określenia, które pliki zostały zmienione w jakim celu.

Jeśli jednak po prostu częściej dokonujesz wąskich zatwierdzeń, pojedyncze zatwierdzenie wyjaśni, które pliki zostały zmodyfikowane, i możesz po prostu opisać, jaki był cel komunikatu.

Więcej zobowiązań, częściej. W ten sposób możesz uniknąć bycia tak gadatliwym w swoich wiadomościach.


-2

Nie powinno

Każdy zainteresowany może zobaczyć zmiany w historii

Jest to również niemożliwe w większych systemach, ponieważ wiele plików może być generowanych automatycznie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.