您的预期不正确。 Git 不会在提交时记录文件的时间戳。
此外,如果签出操作需要 Git 检索文件的不同版本并将其复制到项目的工作树中,您的操作系统将更新工作树中文件的时间戳以反映当前显示的日期和时间由您的系统时钟决定。
通过执行以下实验自行检查。
首先设置:
cd ~/Desktop
mkdir git_test
cd git_test
git init
创建一个文件,开始跟踪它并创建第一个提交(在master)。
touch README.md
git add README.md
git commit -m "add README to project"
现在检查README.md文件的时间戳
ls -la
写下那个时间;就我而言,时间是 19:00;让我们称之为“time1”。在这个阶段,等待至少 60 秒。然后创建并签出一个名为 other 的新分支:
git checkout -b other
编辑README.md;例如:
printf "This is the project's README\n" > README.md
现在暂存文件并创建第二个提交(在other):
git add README.md
git commit -m "edit README"
再做ls -la,记下README.md的时间戳;就我而言,时间是 19:02;我们称之为“time2”。
在这个阶段,提交图(尝试git log --graph --all --decorate)应该如下所示:
* other, HEAD
|
* master
现在再次查看master 并检查工作目录中自述文件的时间戳。
git checkout master
ls -la
现在,与您的预期相反,README.md 的时间戳不与 time1 匹配,而是与当前时钟时间匹配。至少再等待 60 秒,然后再次签出 other 并检查时间戳:
git checkout other
ls -la
同样在这种情况下,与您的预期相反,README.md 的时间戳不与 time2 匹配,而是与当前时钟时间匹配。
编辑:这是一个较短的实验,证明 Git 不会将文件的时间戳烘焙到相应 blob 的 SHA-1 哈希中。
printf "hello\n" > greetings.txt
git hash-object greetings.txt
写下返回的哈希值。稍等。
touch greetings.txt
git hash-object greetings.txt
即使touch greetings.txt 更改了文件系统中greetings.txt 的时间戳,哈希值也应该与您第一次调用git hash-object 时相同。