İlk işleme nasıl başvurulur?


131

Bir depodaki ilk yürütmeye başvurması gereken bir komut dosyam var. git'in özel referansı var HEAD, ancak karşılık gelen referansı yok TAIL. git help rev-parseBana yardımcı olacak hiçbir şey bulamıyorum .

İşte yapmak istediğim şey:

git show TAIL

İşte sahip olduğum bir seçenek:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

Bu oldukça zordur ve git log çıktısının değişmemesine bağlıdır.

Şu anda sadece ilk commit'i etiketlerim ve bunu refspec'im olarak kullanırım. Ancak, genel bir araç yayınlamak istiyorum, bu yüzden bu harika bir seçenek değil.

Yanıtlar:


151

Komut dosyası oluşturmak için git-log kullanmayın: ya git-rev-listveya git-logbelirtilen özel formatla ( --format=*<sth>*seçenek) kullanın.

Sorunuzla ilgili ek bir sorun var: Bir depoda birden fazla TAIL kök yürütme (ebeveynsiz yürütme) olabilir (git.git'te 'html', 'man' ve 'todo' gibi bağlantısı kesilmiş şubeleri indirsek bile) havuz). Bu genellikle ayrı projelerin tek bir projede birleştirilmesinin veya ayrı olarak geliştirilen alt projenin alt ağaç birleştirmesinin kullanılmasının sonucudur.

Örneğin, git deposunun 6 kök işlemi vardır: git-gui, gitk (alt ağaç birleştirilmiş), gitweb (birleştirilmiş, artık ayrı olarak geliştirilmemiştir), git posta araçları (proje geçmişinde çok erken birleştirilmiştir) ve p4-hızlı dışa aktarma ( belki tesadüfi). Bu, 'html ve' man 'dallarının köklerini, önceden oluşturulmuş belgeleri içeren "uygunluk" dallarını ve TODO listesi ve komut dosyalarıyla "yapılacak" dalı saymaz.


Git 1.7.4.2 veya daha yenisine sahipseniz, şu --max-parentsseçeneği kullanabilirsiniz :

$ git rev-list --max-parents=0 HEAD

Aksi takdirde, mevcut şubeden erişilebilen tüm ebeveynsiz (kök) işlemlerin listesini şu şekilde alabilirsiniz:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

Benim için git rev-list HEAD | tail -n 1ve benim git rev-list --max-parents=0 HEADiçin aynı hash değerini döndürmüyor. --max-parents=0Aslında kullanan kişi aslında ilk commit'i alıyor. Sadece ikincisinin daha güvenilir göründüğüne işaret edeceğimi düşündüm.
jbranchaud

1
@Treebranch, garip zaman damgalarıyla taahhütleriniz varsa bu olabilir. ekleyerek --topo-orderiçin rev-listbence olsa onarmalısın --max=parents=0cevabı en iyisidir.
jthill

35

git rev-list HEAD | tail -n 1 daha kararlı bir seçenektir.


14
Bu , kuyruk taahhütlerinden birini döndürür ; birden fazla kök (öksüz) işlemek olabilir
Jakub Narębski

Bu cevap mükemmel çalıştı ve yalnızca bir commit sha döndürürken git rev-list --max-parents=0 HEAD3 commit döndürdü.
protoEvangelion

tail ayrıca pencerelerde varsayılan olarak bulunan bir komut değildir - yine de pencerelerde GitBash ile çalışır. :)
Johny Skovdal
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.