秀出指定檔案的git hash值
雖然知道git也是用sha1演算法產生hash code,但是一直覺得怎麼跟sha1sum指令產生出的結果不同,goolge後才知道git因為還有加入其他參數所以才會讓他和sha1sum產生出的結果不一樣。
下面的小程式是秀出指定檔案的git hash值
#!/usr/bin/python
import sys, os
from hashlib import sha1
# emulate the behavior
# > git hash-object <file-path>
def githash(filepath):
filesize_bytes = os.path.getsize(filepath)
s = sha1()
s.update(("blob %u\0" % filesize_bytes).encode('utf-8'))
with open(filepath, 'rb') as f:
s.update(f.read())
return s.hexdigest()
if __name__ == '__main__':
argc = len(sys.argv)
if argc<=1:
print 'Should give at least one file path!'
sys.exit(1)
for f in sys.argv[1:]:
print f,"\t",githash(f)
由於git show時內會顯示檔案的sha1sum,但是都我們自己打sha1sum的結果不同,
原因是git得sha1會加上描述檔案類型的字串和檔案size在檔案內容前面,之後再計算sha1sum,所以數值才會不同
參考資料: https://ihower.tw/git/internal.html
下面的小程式是秀出指定檔案的git hash值
#!/usr/bin/python
import sys, os
from hashlib import sha1
# emulate the behavior
# > git hash-object <file-path>
def githash(filepath):
filesize_bytes = os.path.getsize(filepath)
s = sha1()
s.update(("blob %u\0" % filesize_bytes).encode('utf-8'))
with open(filepath, 'rb') as f:
s.update(f.read())
return s.hexdigest()
if __name__ == '__main__':
argc = len(sys.argv)
if argc<=1:
print 'Should give at least one file path!'
sys.exit(1)
for f in sys.argv[1:]:
print f,"\t",githash(f)
由於git show時內會顯示檔案的sha1sum,但是都我們自己打sha1sum
原因是git得sha1會加上描述檔案類型的字串和檔案size在檔案內容前面,之後再計算sha1sum,所以數值才會不同
參考資料: https://ihower.tw/git/internal.html
留言