Chciałbym uzyskać liczbę zatwierdzeń z mojego repozytorium Git, trochę jak numery wersji SVN.
Celem jest użycie go jako unikalnego, rosnącego numeru kompilacji.
Obecnie tak robię na Unix / Cygwin / msysGit:
git log --pretty=format:'' | wc -l
Ale czuję, że to trochę hack.
Czy jest na to lepszy sposób? Byłoby fajnie, gdybym naprawdę nie potrzebował wc
ani nawet Gita, aby mógł działać na nagim systemie Windows. Po prostu przeczytaj plik lub strukturę katalogów ...
git
build-process
revision
Splo
źródło
źródło
git rev-list HEAD --count
git rev-listOdpowiedzi:
Aby uzyskać liczbę zatwierdzeń dla wersji (
HEAD
,master
skrót mieszania):Aby uzyskać liczbę zatwierdzeń we wszystkich gałęziach:
Odradzam używanie tego do identyfikatora kompilacji, ale jeśli musisz, prawdopodobnie najlepiej użyć liczby dla gałęzi, na której budujesz. W ten sposób ta sama wersja zawsze będzie miała ten sam numer. Jeśli użyjesz liczby dla wszystkich gałęzi, aktywność w innych gałęziach może zmienić liczbę.
źródło
git shortlog | grep -E '^[ ]+\w+' | wc -l
jeśli chcesz uzyskać łączną liczbę igit shortlog | grep -E '^[^ ]'
jeśli chcesz uzyskać liczbę zatwierdzeń dla każdego uczestnika.wc -l
. Minimalizm FTW. Włączyłem to do mojej odpowiedzi.git log --pretty=format:'' | wc -l
podejścia podanego w pierwotnym pytaniu), jak i niepoprawne: możesz to zobaczyć, odwracając match (git shortlog | grep -Ev '^[ ]+\w+'
) i widząc, że np. Zatwierdzenia bez wiadomości (tj. „<none>”) nie są liczone. Korzystaniegit rev-list HEAD --count
jest bardziej zwięzłe i dokładniejsze.git rev-list HEAD --count
jest teraz lepszym rozwiązaniem.git log --oneline | wc -l
git shortlog
jest jeden sposób.źródło
git rev-list HEAD --count
raczej niż oryginalne podejście podane w PO. W moich testachgit log --pretty=format:'' | wc -l
jest wyłączony o jeden.git log --oneline | wc -l
nie jest wyłączony przez jeden (OS X 10.8.5).git rev-list HEAD --count
git rev-list
git rev-list <commit>
: Lista zatwierdzeń, które są osiągalne, podążając za linkami nadrzędnymi z podanego zatwierdzenia (w tym przypadku HEAD ).--count
: Wydrukuj liczbę wskazującą, ile zatwierdzeń byłoby na liście, i pomiń wszystkie inne dane wyjściowe.źródło
To polecenie zwraca liczbę zatwierdzeń pogrupowanych według podmiotów zatwierdzających:
Wynik:
Możesz chcieć wiedzieć, że
-s
argumentem jest forma skurczu--summary
.źródło
git shortlog
sam w sobie nie odnosi się do pierwotnego pytania o całkowitą liczbę zatwierdzeń (nie pogrupowanych według autora). Użyjgit rev-list HEAD --count
zamiast tego.| sort -n
zbytJeśli szukasz unikalnego i wciąż dość czytelnego identyfikatora zatwierdzeń, git opisz może być właśnie dla Ciebie.
źródło
Nie jesteś pierwszym, który myśli o „numerze wersji” w Git , ale „
wc
” jest dość niebezpieczne, ponieważ zatwierdzenie można usunąć lub zmiażdżyć, a historia powrócić.„Numer wersji” był szczególnie ważny dla Subversion, ponieważ był potrzebny w przypadku scalenia (SVN1.5 i 1.6 poprawiły się na tym froncie).
Możesz skończyć z hakiem poprzedzającym zatwierdzenie, który zawierałby numer zmiany w komentarzu, z algorytmem nie wymagającym przeglądania całej historii gałęzi w celu ustalenia poprawnej liczby.
Bazar faktycznie wymyślił taki algorytm i może być dobrym punktem wyjścia do tego, co chcesz zrobić.
(Jak wskazuje odpowiedź Bombe, Git ma właściwie własny algorytm, oparty na najnowszym tagu, plus liczbę zatwierdzeń i odrobinę klucza SHA-1). Powinieneś zobaczyć (i pochwalić) jego odpowiedź, jeśli zadziała dla ciebie.
Aby zilustrować pomysł Aarona , możesz również dołączyć skrót Git commit do pliku „informacji” aplikacji, który dystrybuujesz wraz z aplikacją.
W ten sposób pole about wyglądałoby następująco:
Numer aplikacyjny jest częścią zatwierdzenia, ale plik „informacji” aplikacji jest generowany podczas procesu pakowania, skutecznie łącząc numer kompilacji aplikacji z identyfikatorem wersji technicznej .
źródło
Możesz po prostu użyć:
Wynik:
źródło
Prostym sposobem jest:
oneline
zapewnia to.źródło
Aby przekształcić go w zmienną, najprostszym sposobem jest:
źródło
git rev-list
jest to właściwe narzędzie do użycia, a niegit log
jak inne powiedzą.wc -l
po prostu użyć--count
przełącznika:git rev-list --all --count
.--count
sam przełącznik.Git shortlog jest jednym ze sposobów uzyskania szczegółów zatwierdzenia:
Spowoduje to podanie liczby zatwierdzeń i nazwy autora. Opcja -s usuwa wszystkie komunikaty zatwierdzeń dla każdego zatwierdzenia dokonanego przez autora. Usuń tę samą opcję, jeśli chcesz widzieć również komunikaty zatwierdzeń. Opcja -n służy do sortowania całej listy. Mam nadzieję że to pomoże.
źródło
git shortlog
sam w sobie nie odnosi się do pierwotnego pytania o całkowitą liczbę zatwierdzeń (nie pogrupowanych według autora). Użyjgit rev-list HEAD --count
zamiast tego.git rev-parse - short HEAD
źródło
Jest ładny skrypt pomocniczy, którego używają ludzie Git, aby pomóc wygenerować użyteczny numer wersji na podstawie opisu Git. Pokazuję skrypt i wyjaśniam go w mojej odpowiedzi na pytanie: W jaki sposób zawarłbyś bieżący identyfikator zatwierdzenia w plikach projektu Git? .
źródło
Jeśli używasz tylko jednej gałęzi, takiej jak master, myślę, że to zadziała świetnie:
Spowoduje to wyświetlenie tylko liczby. Możesz to zmienić na coś takiego
aby rzeczy były naprawdę wygodne. W tym celu edytuj
.git/config
plik i dodaj go w:To nie będzie działać w systemie Windows. Nie znam odpowiednika „wc” dla tego systemu operacyjnego, ale napisanie skryptu w języku Python w celu liczenia dla Ciebie byłoby rozwiązaniem wieloplatformowym.
EDYCJA : Uzyskaj licznik między dwoma zatwierdzeniami:
Szukałem odpowiedzi, która pokaże, jak uzyskać liczbę zatwierdzeń między dwiema dowolnymi wersjami i nie widziałem żadnej.
źródło
Wygeneruj liczbę podczas kompilacji i zapisz ją do pliku. Za każdym razem, gdy tworzysz wydanie, zatwierdzaj ten plik z komentarzem „Kompilacja 147” (lub niezależnie od tego, jaki jest obecnie numer kompilacji). Nie zatwierdzaj pliku podczas normalnego programowania. W ten sposób możesz łatwo mapować między numerami kompilacji i wersjami w Git.
źródło
W naszej firmie przenieśliśmy się z SVN do Git. Brak numerów wersji był dużym problemem!
Wykonaj
git svn clone
, a następnie oznacz ostatnie zatwierdzenie SVN jego numerem wersji SVN:Następnie możesz uzyskać numer wersji za pomocą
To polecenie daje coś takiego:
Oznacza: Ostatni tag to 7603 - to wersja SVN. 3 - to liczba zatwierdzeń z niego. Musimy je dodać.
Tak więc numer wersji można policzyć za pomocą tego skryptu:
źródło
Ten, którego użyłem to:
Proste, ale zadziałało.
źródło
Używając składni Bash,
wygląda dobrze na czysto liniową historię. Jeśli chcesz czasem mieć „liczby” z gałęzi (na podstawie
master
), rozważ:Po uruchomieniu z kasy
master
otrzymujesz po prostu coś1234.0
podobnego. Po uruchomieniu z kasy oddziału otrzymasz coś takiego1234.13
, jeśli dokonano 13 zatwierdzeń w tym oddziale. Oczywiście jest to przydatne tylko wtedy, gdy bazujesz na co najwyżej jednej gałęzi z danejmaster
wersji.--first-parent
można dodać do mikro-liczby, aby ukryć niektóre zatwierdzenia wynikające tylko z połączenia innych gałęzi, chociaż prawdopodobnie nie jest to konieczne.źródło
Możesz spróbować
lub aby wyświetlić listę wszystkich zatwierdzeń wykonanych przez osoby uczestniczące w repozytorium
źródło
git config --global alias.count 'rev-list --all --count'
Jeśli dodasz to do swojej konfiguracji, możesz po prostu odwołać się do polecenia;
git count
źródło
Używaj git shortlog w ten sposób
git shortlog -sn
Lub utwórz alias (dla terminala opartego na ZSH)
# show contributors by commits alias gcall="git shortlog -sn"
źródło
Co powiesz na zrobienie
alias
?źródło