为什么Git只散列文件的内容?

时间:2017-11-24 01:35:33

标签: git hash

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如何跟踪该更改?

1 个答案:

答案 0 :(得分:2)

但为什么Git会从哈希中排除文件的名称?它如何区分empty1.txt和empty2.txt?

因为Git管理内容(如果两个文件的内容相同,那么它们的SHA1也是如此)

文件名称tree (directory content)管理,列出给定文件夹中的文件。

https://git-scm.com/book/en/v2/images/data-model-2.png

$ git cat-file -p 3c4e9cd789d88d8d89c1073707c3585e41b0e614
040000 tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579      bak
100644 blob fa49b077972391ad58037050f2a75f74e3671e92      new.txt
100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a      test.txt