SORU
16 ŞUBAT 2009, PAZARTESİ


Atama Gıt olmadan SHA1'In Git

Git bir dosyanın SHA1 karma atarken anladığım kadarıyla bu SHA1 dosya içeriğine göre özeldir.

Eğer bir dosya başka bir depodan hareket ederse sonuç olarak dosyanın SHA1 içeriği değişmedi aynı kalır.

Nasıl Gıt SHA1 özetini hesaplar? Tam sıkıştırılmamış dosya içeriği işe yarar?

Git SHA1 dışarıda atama taklit etmek istiyorum.

CEVAP
16 ŞUBAT 2009, PAZARTESİ


Bu bir dosyanın SHA1 hesaplar nasıl ya, Git açısından,"") blob:

sha1("blob "   filesize   "\0"   data)

Kolayca Kendin Git yüklü olmadan hesaplayabilirsiniz. "\0" BOŞ bayt, iki karakter dizesi. unutmayın

Örneğin, boş bir dosya hash:

sha1("blob 0\0") = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"

$ touch empty
$ git hash-object empty
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

Başka bir örnek:

sha1("blob 7\0foobar\n") = "323fae03f4606ea9991df8befbb2fca795e648fa"

$ echo "foobar" > foo.txt
$ git hash-object foo.txt 
323fae03f4606ea9991df8befbb2fca795e648fa

Burada bir Python uygulaması

from hashlib import sha1
def githash(data):
    s = sha1()
    s.update("blob %u\0" % len(data))
    s.update(data)
    return s.hexdigest()

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006