2011-04-12 25 views
13

Bir betikten bir alt ağaç geçmişini yeniden yazdıktan sonra, aynı alt ağaç üzerinde git filter-branch ... ile ne yapacağını karşılaştırdım. İlk işlerin farklı sha1 olduğunu görmeme rağmen, bunların aynı olmalarını bekledim (bunun sonucu olarak, her iki tarihin de tümünün farklı şekilleri vardır).görünüşte aynı taahhütler farklı sha1 veriyor, neden?

Her iki işlemin de bir git show --format=raw <commit-sha1> yapması, tam olarak aynı çıkışı verir (ilk satır, commit <commit-sha1> olan, sonuç tanıtımı olan).

Nesne dosyaları tamamen farklıdır, ancak ikili oldukları için kök nedenini anlayamıyorum.

Tüm git sürümlerinin birbiriyle tutarlı olduğunu varsayarsak, 2 farklı sha1'e sahip ne olabilir?

böyle ağacın SHA1 olarak karma işlemek bir size

+0

Belki de değişen bir e-posta, değişen bir taahhüt tarihi veya benzer bir meta bilgi var mı? –

cevap

14

seyahatseverlerin Git adlı girdileri ederiz meta verileri, ebeveynin SHA1, commiter adı, e-posta ve tarihini işlemek ve yazarın adı, e-posta ve taahhüt tarih . Öyleyse, geçmişi yeniden yazdığınızda, işlemcinin taahhüt tarihi ve ağacı (bir filter-branch yaptığınız için) muhtemelen değişti, dolayısıyla da işinizin SHA1indeki fark değişti.

Bir işlemin biçimi hakkında daha fazla bilgi için, git cat-file commit <sha>'u kullanabilir veya Git Objects section of the Git Book'u arayabilirsiniz.

+1

Tüm ağaç, ebeveynler, e-postalar, tarihler, yazar ve komistan isimleri bildirildi. Bu arada 'git cat-file 'kullanma öneriniz, kaydedilen yorumlarda ekstra' \ n 'görmeme yardımcı oldu, ben de' git show' ile herhangi bir fark görmüyorum. Bunu kontrol ediyorum. – bm842

+1

Bazı araçların, hiçbiri olmadığında (bazen boş bir satır ile bitecek şekilde) ekleme iletisinin sonunda ek bir boş satır eklediğini gördüm. Belki senin durumunda olan budur? –

+0

Betiğimin yanlış bir şekilde yeni satır eklediğini doğrularım. Onu tamir ettim ve şu sha1'e sahip oldum. Teşekkür ederim Sylvain. – bm842

İlgili konular