在处理二进制文件时,git 似乎考虑用另一个修改过的文件重命名替换文件。例如,当用 foo-1.0.3.jar 或以下测试用例替换 foo-1.0.1.jar 时会发生这种情况:
$ dd if=/dev/urandom of=test.dat bs=1024 count=10
$ md5sum test.dat
8073aef704e9df13b44818371ebbcc0b test.dat
$ git add test.dat && git commit -m 'add binary file'
$ mv test.dat test2.dat
$ git rm test.dat
$ dd if=/dev/urandom of=test2.dat bs=1 count=1 conv=notrunc
$ md5sum test2.dat
21e1ac3ab9ba50c9dad9171f9de7232d test2.dat
$ git add test2.dat
现在我显然有一个包含新内容(至少部分)和新名称的文件。但是,git 认为这是一个重命名git status
:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: test.dat -> test2.dat
- 这是什么原因,例如这两个文件必须有多相似?如果 test2.dat 包含完全不同的数据,这似乎不会发生。
- 除了看起来有点尴尬之外,它有什么缺点吗?实际数据似乎非常好;在检查上一个版本时,我确实得到了该版本的正确文件。