2009-06-17 12 views
92

Bir depodaki ilk işlemi referans alması gereken bir komut dosyası var. git, HEAD numaralı özel referansa sahiptir, ancak ilgili TAIL'a sahip değildir. git help rev-parse numaralı telefondan bana yardım edebilecek hiçbir şey bulamıyorum.İlk işlem nasıl referans alınır?

İşte yapmak istediğim bu: oldukça hacky var ve git log çıkış değişmiyor bağlıdır

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

:

git show TAIL 

İşte ben bir seçenek.

Şimdilik sadece ilk yüklemeyi etiketledim ve bunu refspec olarak kullanıyorum. Bununla birlikte, genel bir araç yayınlamak istiyorum, bu mükemmel bir seçenek değil.

cevap

110

komut dosyası için git-log kullanmayın: Git-rev-liste veya birini kullanın belirtilen özel biçimi ("--format = <STH>" seçeneği) ile budala-log.

sorunuzla ilgili ek bir sorun var: orada bulunabilir birden fazla böyle KUYRUK kök (biz böyle 'html', 'adam' ve 'olarak, bağlantısız dalları indirim bile depoda (ailesiz taahhüt) işlemek git.git deposunda yapılacaklar. Bu genellikle ayrı projelerin bir araya getirilmesinin veya ayrı olarak geliştirilen alt projenin alt ağaç birleştirilmesinin bir sonucudur.

Örneğin git deposunun 6 temel görevi vardır: git-gui, gitk (alt birleştirilmiş birleştirilmiş), gitweb (birleştirilen, artık ayrı olarak geliştirilmemiş), git posta araçları (proje geçmişinde çok erken bir tarihte birleştirilir) ve p4- hızlı ihracat (belki de tesadüfi). Bu, 'html' ve 'man' dallarının kökleri sayılmıyor, önceden oluşturulmuş belgeler içeren “kolaylık” dalları ve TODO listesi ve betikleriyle “todo” dalı. Eğer 1.7.4.2 veya daha yeni, yeni --max-parents seçeneğini kullanabilirsiniz git'e varsa

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

:


Hepiniz ailesiz (root) listesini alabilirsiniz kullanarak mevcut dalından erişilebilir taahhüt

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

Boru yok, tüm kökler: 'git rev-list --max-parent = 0 HEAD ' – wowest

+3

@wowest: IIRC,' --max-ebeveyn 'seçeneği yokken bu cevabı yazıyordu. Güncelleme için Thansk! –

+0

Benim için 'git rev-list HEAD | tail -n 1 've 'git rev-list --max-parent = 0 HEAD' benim için aynı karma değerini döndürmüyor. '--max-parents = 0 'kullanan kişi aslında ilk işlemi gerçekleştiriyor. Sadece, ikincisinin daha güvenilir olduğunu gösterdiğimi düşündüm. – jbranchaud

21

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

+8

Bu, * bir kuyruk kuyruğu döndürecektir; birden fazla kök (ebeveynsiz) olabilir. –