在处理二进制文件时,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
Run Code Online (Sandbox Code Playgroud)
现在我清楚地有一个包含新内容(至少部分)和新名称的文件.但是,git认为这是一个重命名git status:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: test.dat -> test2.dat
Run Code Online (Sandbox Code Playgroud)
Git 实际上并不存储重命名,它只是存储一棵新树,其中删除了一个文件并添加了另一个文件。比较树 ( git diff、git log、git status) 的 Git 命令根据内容检测重命名。
由于某种原因,您的文件会触发重命名检测。如果你耗尽了 中的熵,也许它们的内容是相似的/dev/urandom?
编辑:参见例如git 如何检测相似的文件,以进行重命名检测?有关重命名检测的详细信息。
| 归档时间: |
|
| 查看次数: |
1353 次 |
| 最近记录: |