从this post开始,计算Git中文件的哈希值
Commit Hash (SHA1) = SHA1("blob " + <size_of_file> + "\0" + <contents_of_file>)
我自己测试了两个空文件以检查它是否正确:
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 empty1.txt
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 empty2.txt
但为什么Git会从哈希中排除文件的名称?它如何区分empty1.txt和empty2.txt?
如果我要将empty1.txt的名称更改为empty2.txt,那么当我调用git status时,Git如何跟踪该更改?
答案 0 :(得分:2)
但为什么Git会从哈希中排除文件的名称?它如何区分empty1.txt和empty2.txt?
因为Git管理内容(如果两个文件的内容相同,那么它们的SHA1也是如此)
文件名称由tree (directory content)管理,列出给定文件夹中的文件。
$ git cat-file -p 3c4e9cd789d88d8d89c1073707c3585e41b0e614
040000 tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579 bak
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt