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

  • BioHunta

    BioHunta

    28 Mayıs 2006
  • iNCH

    iNCH

    20 Temmuz 2009
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010