Git jest rozproszonym systemem kontroli wersji, więc musisz dokładnie zdefiniować, co rozumiesz przez „datę wypychania”. Na przykład załóżmy, że użytkownik A wypycha niektóre zatwierdzenia do repozytorium użytkownika B. Jakiś czas później użytkownik B wypycha te same zatwierdzenia do trzeciego repozytorium. Która data Cię interesuje?
Spekuluję, że masz współdzielone repozytorium i chcesz, aby użytkownicy tego współużytkowanego repozytorium mogli określić, kiedy coś zostało opublikowane w repozytorium. Jeśli to prawda, musisz zebrać te informacje w udostępnionym repozytorium.
Złe wiadomości
Niestety, nie ma możliwości dodania daty do komunikatów o zmianach. To zmieniłoby identyfikator zatwierdzenia (który jest skrótem SHA1 zawartości), powodując różnego rodzaju problemy.
Dobre wieści
Na szczęście Git ma (stosunkowo nową) funkcję o nazwie notatki . Ta funkcja umożliwia dołączanie dowolnego tekstu do zatwierdzeń, które git log
mogą być wyświetlane. Notatki można edytować i udostępniać innym.
Możesz użyć funkcji notatek, aby dołączyć wiadomość „to zatwierdzenie otrzymano w dniu [data]” do każdego zatwierdzenia otrzymanego przez współdzielone repozytorium.
Zobacz git help notes
szczegóły.
Jak zapisać datę
Oto podejście, które polecam:
- Zmodyfikuj punkt
post-receive
zaczepienia we współdzielonym repozytorium, aby przechodzić przez każde nowo osiągalne zatwierdzenie dla każdego zaktualizowanego odniesienia.
Dla każdego zatwierdzenia dodaj coś w rodzaju „[użytkownik] z [repository_url] dodał to zatwierdzenie do [ref] dnia [data]” do notatki dotyczącej zatwierdzenia.
Możesz użyć przypisu przypisanego do tego celu (np. refs/notes/received-on
) Zamiast domyślnego refs/notes/commits
. Zapobiegnie to konfliktom z notatkami utworzonymi do innych celów.
- Zmodyfikuj swój
receive
haczyk, aby odmówić aktualizacji odniesienia do notatek (aby uniemożliwić użytkownikom przypadkowe lub celowe manipulowanie notatkami).
Powiedz wszystkim użytkownikom, aby uruchomili następujące polecenia z poziomu ich drzewa roboczego:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Ten krok jest konieczny, ponieważ Git domyślnie ignoruje niezwiązane z odgałęzieniami odniesienia bez tagów w nadrzędnych repozytoriach.
Powyższe zakłada, że odniesienia są tylko zaawansowane, nigdy nie są usuwane ani aktualizowane na siłę. Prawdopodobnie będziesz chciał, aby post-receive
hak dołączył również notatki „usunięto dnia [data]”, aby obsłużyć te przypadki.
git reflog --date=local origin/master
(uwagaorigin/
), aby zobaczyć listę wypchnięć. W przeciwnym razie na liście znajdowały się tylko commits, checkouts i pulls (co też jest przydatne). Właściwie wskazała na to odpowiedź @ JonathanDay .