Co robi git rev-parse?


282

Co ma git rev-parsezrobić?

Przeczytałem stronę podręcznika, ale pojawiło się więcej pytań niż odpowiedzi. Rzeczy jak:

Wybierz i masuj parametry

Masaż ? Co to znaczy?

Używam jako resolvera (do SHA1) specyfikatorów wersji, takich jak

git rev-parse HEAD^

lub

git rev-parse origin/master

Czy to jest cel polecenia? Jeśli nie, to czy w ogóle można go użyć, aby to osiągnąć?


3
O ile widzę na stronie podręcznika, jest to głównie wewnętrzne narzędzie do analizowania nazw wersji / obiektów dla innych poleceń. To, co robisz, jest właściwie celem rev-parsepolecenia. Możesz go również użyć do normalizacji wiersza poleceń, aby rzeczywisty program nie musiał rozumieć skomplikowanej składni nazwy obiektu Git (użyłbyś go git rev-parsedo zmiany lub „masowania” niektórych parametrów w wierszu poleceń przed wywoływany jest rzeczywisty program).


60
Strona git rev-parsepodręcznika dla jest śmiesznie niezrozumiała. Dziwi mnie, że nikt nie zadał sobie trudu przepisania tego żargonu na coś czytelnego dla człowieka, nawet po 5 latach.
not2qubit

@ not2qubit Me: „Dziękuję za wyjaśnienie, czułem się gorszy”. Linus Torvalds: „Przeczytałem go ponownie, dokładnie jakiej części nie zrozumiałeś?”
Brain2000

Odpowiedzi:


245

git rev-parseto pomocnicze plumbingpolecenie używane głównie do manipulacji.

Jednym z powszechnych zastosowań git rev-parsejest drukowanie skrótów SHA1 przy użyciu specyfikatora wersji. Ponadto ma różne opcje formatowania tego wydruku, takie jak --shortwydruk krótszego unikalnego SHA1.

Istnieją również inne przypadki użycia (w skryptach i innych narzędziach zbudowanych na git), których użyłem:

  • --verify aby sprawdzić, czy określony obiekt jest prawidłowym obiektem git.
  • --git-dirdo wyświetlania ścieżki abs / względnej .gitkatalogu.
  • Sprawdzanie, czy aktualnie znajdujesz się w repozytorium za pomocą --is-inside-git-dirczy w drzewie roboczym za pomocą--is-inside-work-tree
  • Sprawdzanie, czy repozytorium jest w użyciu --is-bare-repository
  • Drukowanie skrótów SHA1 z gałęzi ( --branches), tagów ( --tags) i odnośników można również filtrować na podstawie zdalnego (za pomocą --remote)
  • --parse-optaby znormalizować argumenty w skrypcie (coś podobnego do getopt) i wydrukować ciąg wyjściowy, którego można użyćeval

Massagepo prostu implikuje, że możliwe jest przekształcenie informacji z jednej formy w drugą, tj. polecenie transformacji. Oto kilka szybkich przykładów, o których mogę myśleć:

  • nazwa rozgałęzienia lub znacznika w SHA1 zatwierdzenia, na który wskazuje, aby można go było przekazać do polecenia hydraulicznego, które akceptuje tylko wartości SHA1 dla zatwierdzenia.
  • zakres zmian A..Bdla git loglub git diffw równoważne argumenty dla leżącego u podstaw polecenia hydraulicznego jakB ^A

102

Aby rozwinąć etymologię nazwy polecenia rev-parse, Git konsekwentnie używa tego terminu revw poleceniach hydraulicznych jako skrót od „rewizji” i ogólnie oznacza 40-znakowy skrót SHA1 dla zatwierdzenia. Komenda rev-listna przykład drukuje listę 40-znakowych skrótów zatwierdzania dla gałęzi lub cokolwiek innego.

W takim przypadku nazwa może zostać rozwinięta do parse-a-commitish-to-a-full-SHA1-hash. Chociaż polecenie ma kilka funkcji pomocniczych wymienionych w odpowiedzi Tuxdude, jego imiennik wydaje się być przypadkiem użycia przekształcania przyjaznego dla użytkownika odniesienia, takiego jak nazwa gałęzi lub skrótu skrótu, w jednoznaczny 40-znakowy skrót SHA1 najbardziej przydatny dla wielu programów / instalacji hydraulicznych cele.

Wiem, że myślałem, że to było coś „odwrotnie parsować” przez jakiś czas, zanim się zorientowałem i miałem takie same problemy z rozumieniem terminów „masowanie” i „manipulacja” :)

W każdym razie uważam, że pojęcie „analiza składająca się z wersji” jest satysfakcjonującym sposobem myślenia o nim i niezawodną koncepcją przywołania tego polecenia, gdy potrzebuję tego rodzaju rzeczy. Często w skryptach Git bierzesz przyjazne dla użytkownika referencje zatwierdzania jako dane wejściowe od użytkownika i generalnie chcesz, aby zostały przetworzone na sprawdzone i jednoznaczne referencje robocze jak najszybciej po ich otrzymaniu. W przeciwnym razie tłumaczenie i sprawdzanie poprawności danych będzie się rozprzestrzeniać przez skrypt.


9
Dzięki za wyjaśnienie, nie zrozumiałem ani trochę git-docs: git-scm.com/docs/git-rev-parse
Jacob McKay

czy możesz podać nam przykład messagingi manipulationjak wspominasz wcześniej?
Bo Chen

5
Innymi słowy, git rev-parsejest skrótem git revision-parse. Pobiera dane wejściowe i zwraca odpowiedni 40-znakowy identyfikator wersji.
Jonathan Benn

36

git rev-parseDziała również w celu uzyskania bieżącej nazwy oddziału przy użyciu flagi --abbrev-ref, np .:

git rev-parse --abbrev-ref HEAD

Czy w ten sposób można uzyskać komunikat zatwierdzenia?
Leo Droidcoder,

2
@LeoDroidcoder trygit log --format=%B -n 1 <revision>
hipyhop
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.