5
當處理二進制文件時,git似乎考慮用另一個文件替換文件,修改文件重命名。這發生在例如以foo-1.0.3.jar或與下列測試用例替換FOO-1.0.1.jar時:爲什麼git-status將更新的二進制文件顯示爲重命名的新名稱?
$ 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 status
重命名:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: test.dat -> test2.dat
- 什麼是這種情況的原因,例如這兩個文件有多相似?如果test2.dat包含完全不同的數據,它似乎不會發生。
- 除了看起來有點尷尬外,它有什麼缺點嗎?實際數據似乎非常好,當檢查出以前的版本時,我會得到該版本的正確文件。
不,它並不總是成功的二進制文件。 test.dat被重命名爲test2.dat,然後添加了新的內容。 Git說它被重新命名,因爲它已被重命名(和更新)。 – jamessan
@jamessan:git不知道我使用了'mv'和afaik它不檢查inode數字。該git不存儲重命名是正確的,但。 – ThiefMaster
哦,對了,我沒有注意到'notrunc'! – opqdonut