Git rev-parse ne yapıyor?


282

Ne yapar git rev-parse?

Adam sayfasını okudum ama cevaplardan daha fazla soru yöneltti. Gibi şeyler:

Seçme ve masaj parametreleri

Masaj ? Bu ne anlama geliyor?

(SHA1 için) revizyon belirteçleri çözümleyici olarak kullanıyorum

git rev-parse HEAD^

veya

git rev-parse origin/master

Bu emrin amacı mı? Değilse, bunu başarmak için kullanmak doğru mu?


3
Man sayfasında görebildiğim kadarıyla, diğer komutlar için revizyon / nesne adlarını ayrıştırmak çoğunlukla dahili bir yardımcı programdır. Yaptığınız hemen hemen emrin amacı rev-parse. Komut satırını normalleştirmek için de kullanabilirsiniz, böylece gerçek program Git'in karmaşık nesne adı sözdizimini anlamak zorunda kalmaz ( git rev-parsekomut satırındaki belirli parametreleri değiştirmek veya "masaj yapmak" için kullanırsınız) gerçek program denir).


60
İçin man sayfası git rev-parsegülünç bir şekilde anlaşılmaz. Kimse bu jargonu 5 yıl sonra bile insan tarafından okunabilir bir şeye yeniden yazmak için uğraşmadı.
not2qubit

@ not2qubit Me: 'Açıkladığınız için teşekkür ederim, kendimi daha aşağı hissediyordum.' Linus Torvalds: 'Tekrar okudum, tam olarak hangi kısmı anlamadın?'
Brain2000

Yanıtlar:


245

git rev-parseplumbingöncelikle manipülasyon için kullanılan yardımcı bir komuttur.

Yaygın olarak kullanılan bir kullanım şekli, git rev-parsebir düzeltme belirteci verilen SHA1 karmalarını yazdırmaktır. Buna ek olarak, --shortdaha kısa bir benzersiz SHA1 yazdırmak gibi bu çıktıyı biçimlendirmek için çeşitli seçenekler vardır .

Kullandığım başka kullanım durumları da var (git'in üzerine inşa edilen komut dosyalarında ve diğer araçlarda):

  • --verify Belirtilen nesnenin geçerli bir git nesnesi olduğunu doğrulamak için.
  • --git-dir.gitdizinin abs / göreli yolunu görüntülemek için .
  • Şu anda kullanarak bir depoda mı yoksa kullanarak --is-inside-git-dirbir çalışma ağacı içinde mi olduğunuzu kontrol etme--is-inside-work-tree
  • Repo kullanımının çıplak olup olmadığını kontrol etme --is-bare-repository
  • SHA1 dalları (sağlamalarının yazdırma --branches(), etiketleri --tags) ve hakemler de filtrelenmiş uzaktan dayandırılabilir (kullanarak --remote)
  • --parse-optbir komut dosyasındaki bağımsız değişkenleri normalleştirmek (şuna benzer getopt) ve birlikte kullanılabilecek bir çıktı dizesi yazdırmak içineval

Massagesadece bilgiyi bir formdan başka bir formata dönüştürmenin mümkün olduğunu ima eder, yani bir dönüşüm komutu. Bunlar aklıma gelen bazı kısa örnekler:

  • yalnızca birleştirme için SHA1 değerlerini kabul eden bir sıhhi tesisat komutuna aktarılabilmesi için, işaretin SHA1'e bir şube veya etiket adı işaret eder.
  • Bir düzeltme aralığı A..Biçin git logya da git diffaltta yatan tesisat komut olarak eşdeğer argümanları içineB ^A

102

Sadece komut adının etimolojisini detaylandırmak için rev-parseGit rev, sıhhi tesisat komutlarındaki terimi sürekli olarak "revizyon" için kısa kullanır ve genellikle bir taahhüt için 40 karakterlik SHA1 karması anlamına gelir. rev-listÖrneğin komut , bir dal veya başka bir şey için 40 karakterlik karma sağlamaların bir listesini yazdırır.

Bu durumda, ad genişletilebilir parse-a-commitish-to-a-full-SHA1-hash. Komut, Tuxdude'nin cevabında belirtilen birkaç yardımcı fonksiyona sahip olsa da, adının bir şube adı veya kısaltılmış karma gibi kullanıcı dostu bir referansın birçok programlama / tesisat için en yararlı olan 40 karakterlik SHA1 karma değerine dönüştürülmesinin kullanım durumu olduğu görülmektedir. amaçlar.

Ben bir an önce anladım ve "masaj" ve "manipülasyon" terimleri anlam aynı sorun vardı bir süre "ters-ayrıştırma" olduğunu düşünüyordum biliyorum :)

Her neyse, bu "revizyondan ayrıştırma" fikrini düşünmenin tatmin edici bir yolunu ve bu tür bir şeye ihtiyacım olduğunda bu komutu akla getirmek için güvenilir bir kavram buluyorum. Git komut dosyalarında sıklıkla kullanıcı girişi olarak kullanıcı dostu bir taahhüt başvurusu alırsınız ve genellikle mümkün olduğunca çabuk onaylanmış ve açık bir çalışma referansına çözümlenmesini istersiniz. Aksi takdirde, girdi çevirisi ve doğrulaması komut dosyası aracılığıyla çoğalma eğilimindedir.


9
Açıklama için teşekkürler, git-docs bir bit anlamadım
Jacob McKay

Bize bir örnek verebilir messagingve manipulationdaha önce ima olarak?
Bo Chen

5
Başka bir deyişle, git rev-parsekısadır git revision-parse. Verilen girdiyi alır ve karşılık gelen 40 karakterli düzeltme kimliğini döndürür.
Jonathan Benn

36

git rev-parseAyrıca, --abbrev-ref bayrağını kullanarak geçerli şube adını almak için çalışır :

git rev-parse --abbrev-ref HEAD

Bu şekilde bir taahhüt mesajı almak inanılmaz mı?
Leo Droidcoder

2
@DeoDroidcoder deneyingit log --format=%B -n 1 <revision>
hipyhop
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.