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

  • RFS Dan

    RFS Dan

    22 Temmuz 2014
  • SPBedition

    SPBedition

    24 HAZİRAN 2013
  • superflyy88

    superflyy88

    8 ŞUBAT 2009