Mam centralne repozytorium Git. Kiedy pchasz się do repo, chcę uruchomić hak po otrzymaniu. Co zrobi ten hak to stworzyć wiadomość w projekcie Basecamp (używając swojego API). Chcę informacji o właśnie wykonanej aktualizacji. Teraz myślę, że git log -2 --stat
jest wystarczająco dobry, ale chciałby trochę więcej informacji (gałąź, która została zaktualizowana, plik stworzony, pliki usunięte). Czy ktoś może pomóc z poleceniem, które muszę zrobić, aby uzyskać wszystkie informacje? Wykonywanie wielu poleceń jest w porządku ze mną, prawdopodobnie nie ma jednego polecenia, które dostarczy mi wszystkich informacji.Uzyskaj ostatnie zatwierdzenie repozytorium Git.
Odpowiedz
Można znaleźć najnowsze popełnić badając i sortowania plików w .git/refs/heads
: Za każdym razem nowy commit jest wykonany, odpowiedni refs/heads
plik zostanie zmieniony, to znaczy, gdy podjęciem master
, refs/heads/master
jest aktualizowana.
Opracujmy rozwiązanie.
pierwsze zadanie: znaleźć wszystkie branże (czyli wszystkie pliki pod refs/heads
i wydrukować kiedy były ostatnio zmieniony Mówisz o hakach, więc dajemy ścieżkę względem katalogu .git/hooks
.
find ../refs/heads -type f -printf '%[email protected] %p\n'
ten tworzy listę wszystkich branż wraz z datą ich zmian Patrz man page of find
o wyjaśnienie parametrów
drugie zadanie:.. porządek otrzymany lista
find ../refs/heads -type f -printf '%[email protected] %p\n' |\
sort
Trzecie zadanie: musimy najnowszy element w tym wykazie. Od sort
sortuje od starego do nowego, nasz pożądany element znajduje się na dole listy. Dostać ten element z tail
(tylko jeden przedmiot, więc przechodzą flagę -1
):
find ../refs/heads -type f -printf '%[email protected] %p\n' |\
sort |\
tail -1
Czwarte zadanie: upuść datę w otrzymanej linii. Z naszego oświadczenia printf
wiemy, że data i ścieżka są oddzielone spacją. Podaj to jako ogranicznik do cut
(-d " "
) i powiedz, że potrzebujemy drugiego pola (tj. Ścieżki pliku, -f 2
). Dla wygody będziemy przechowywać ścieżkę do pliku w zmiennej o nazwie $LATESTHEAD
:
LATESTHEAD=$(\
find ../refs/heads -type f -printf '%[email protected] %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2)
Zadanie piąte: Teraz wiemy, nazwę pliku, ale musimy ich treść. To jest najnowsza rewolucja, którą można przekazać git log
. cat
wykonuje zadanie. Przechowywać najnowszą wersję w $LATESTREV
LATESTHEAD=$(\
find ../refs/heads -type f -printf '%[email protected] %p\n' |\
sort |\
tail -1 |\
cut -d ' ' -f 2)
LATESTREV=$(cat $LATESTHEAD)
Teraz można użyć $LATESTREV
zrobić jakieś brudne rzeczy, które chcesz.
Być może nie jest to najbardziej eleganckie rozwiązanie (prawdopodobnie ktoś pojawi się i powie o wiele łatwiej jedno-liniowy), ale działa dla mnie.
Dodawanie --summary
do dziennika git będzie produkować nową i usunięty plik z listą (GIT odnosi się do nich jako "węzły"):
git log --stat --summary -1
dostać gałąź, spróbuj uruchomić:
git branch --contains `git log --oneline -1 |cut -f1 -d\ ` |cut -b3-
Uwaga: testuję to na moim macu. Unix cut
ma 1 indeks, ale wierzę, że Debian cut
jest zindeksowany. Jeśli tak, i jeśli jesteś na polu Debiana, zmień -f1
do -f0
a polecenie oddział powinien działać dobrze
jeśli nie ma konkretnego powodu, dlaczego używasz post-receive
, wolałbym sugerować użyciu update
, który dostaje stary ref, nowy ref i branch jako argumenty wiersza poleceń.
Więc można po prostu cały dziennik pomocą poleceń git log
sugerowanych tutaj i podając oldref..newref
jako argumentu (zastępując oldref
i newref
odpowiednio).
Aby uzyskać więcej informacji, patrz githooks(5) manpage on the update hook. W razie potrzeby możesz nawet przerwać aktualizację, jeśli zajdzie taka potrzeba.
W rzeczywistości otrzymujesz te same informacje w haku post-receive
na stdin. Nie rozumiem, dlaczego trzeba wykonać wiele poleceń, aby wykonać to zadanie.
Jak uzyskać informacje o 'oldref' i' newref'? Jestem całkiem nowy z Git i hookami. Mam moje repozytorium Git połączone z moim Basecamp i działa jak czar. Ale jeśli jest lepszy sposób i mogę uzyskać więcej informacji, jeszcze lepiej. Zamierzam przeczytać dalej tę stronę podręcznika githooks (5), ale jeśli da się to zrobić, byłbym bardzo wdzięczny. – Jeebs24
OK, zamiast tego przełączam się na hak 'update'. Dzięki za sugestię Jonas. – Jeebs24
- 1. Git cofnij ostatnie zatwierdzenie
- 2. Jak "ponownie otworzyć" ostatnie zatwierdzenie git?
- 3. Jak cofnąć ostatnie zatwierdzenie w git
- 4. Przeczytaj ostatnie zatwierdzenie git i commit number
- 5. Tortoisegit cofnąć ostatnie zatwierdzenie do repozytu
- 6. Jak zdobyć ostatnie zatwierdzenie HEAD w repozytorium git za pomocą libGit2Sharp?
- 7. Znajdź ostatnie zatwierdzenie w repozytorium Git zawierające określony wzorzec ciągu znaków
- 8. Jak mogę cofnąć moje ostatnie dodanie/zatwierdzenie git?
- 9. Cofnij zatwierdzenie git
- 10. Utwórz repozytorium git zawierające inne repozytorium git.
- 11. Uzyskaj migawkę repozytorium git w określonym dniu
- 12. Przywrócić poprzednie zatwierdzenie git?
- 13. Połącz lokalne zatwierdzenia Git w jedno zatwierdzenie dla git-svn
- 14. git sprawdź czas, w którym zatwierdzono zatwierdzenie
- 15. Git: przenieś zatwierdzenie "na wierzch"
- 16. Utrzymywanie repozytorium Git w innym repozytorium git
- 17. Jak widzisz, które zatwierdzenie usunęło plik z repozytorium?
- 18. API GitHub v3 - jak utworzyć wstępne zatwierdzenie w repozytorium?
- 19. Uzyskaj pip do pracy z repozytorium git i github
- 20. Jak cofnąć zatwierdzenie
- 21. Konwersja kodu pliku repozytorium git
- 22. Uzyskaj ostatnie 10000 linii pliku csv.
- 23. Jak usunąć pierwsze zatwierdzenie w git?
- 24. Zatwierdzenie zatwierdzenia kodu JIRA dla 'git'
- 25. Usuń zatwierdzenie git, które nie pchnęło
- 26. Git: Jak mogę zmienić zatwierdzenie serwera?
- 27. Znajdź zatwierdzenie przez haszowanie SHA w Git
- 28. Jak mogę "ponownie otworzyć" zatwierdzenie git?
- 29. Całkowicie usuń zatwierdzenie z bazy danych git
- 30. Uzyskaj ostatnie rekordy uporządkowane według danych Spring Data
To faktycznie działa również dobrze. Potrzebuję również nazwy oddziału, więc domyślam się, że muszę uruchomić ** trzecie zadanie ** najpierw w nazwie oddziału. Następnie uruchamiam ** Piąte Zadanie **, aby uzyskać wartość skrótu zatwierdzenia. Następnie uruchamiam 'git log --stat -1', aby uzyskać pełne informacje o zatwierdzeniu. To dziwne, że muszę dodać '-1'. Nie robię tego wszystkiego ... dziwnie. W każdym razie wygląda na to, że to działa! Dzięki eckes! –
Jeebs24
Przepraszamy za promowanie mojej odpowiedzi, ale nie widzę, dlaczego używasz znaleźć tutaj, jeśli wszystkie informacje są podane na stdin przez git podczas wywoływania post-receive (patrz [githooks (5)] (https: //www.kernel. org/pub/software/scm/git/docs/githooks.html # post-receive)). –