我不小心在Windows上提交了一个带有UTF8编码的文本文件,没有在提交之前删除BOM。现在我尝试在后续版本中删除它并再次提交此更改。看起来Git忽略了对BOM字节的更改。是否有一种设置可以让Git像原样检入文件?(我知道在处理行结尾时存在类似的问题-并且有一个相应的设置...)
我不小心在Windows上提交了一个带有UTF8编码的文本文件,没有在提交之前删除BOM。现在我尝试在后续版本中删除它并再次提交此更改。看起来Git忽略了对BOM字节的更改。是否有一种设置可以让Git像原样检入文件?(我知道在处理行结尾时存在类似的问题-并且有一个相应的设置...)
xxd -r > raw <<< "0000000: 4865 c582 c397 c3b8 0a He......."
cat raw # shows "Heł×ø" in UTF8 terminals
git init .
iconv -t UTF32BE raw > test
git commit -am nobom test
iconv -t UTF32 raw > test
git diff # reports: "Binary files a/test and b/test differ"
git commit -am bom test
验证不同的对象是否存在:
git rev-list --objects --all
1d0cf0c1871a8743f947bd4582198db4fc1e72b1
c52c2a8c211a0031e01eef5d5121d5d0b4aabc40
4740254f8f52094afc131040afc80bb68265e78c
fd3c513224525b3ab94a2512cbbfa918793640eb test
2d9da153c5febf0425437395227381d3a4784154
2e54d36463fee81e89423d7d80ccc5d7003aba21 test
for h in $(git rev-list --all -- test); do git ls-tree $a; done
100644 blob 2e54d36463fee81e89423d7d80ccc5d7003aba21 test
100644 blob 2e54d36463fee81e89423d7d80ccc5d7003aba21 test
这是在64位Ubuntu上使用Git 1.7.4.1时的情况。
xxd test # no bom:
0000000: 0000 0048 0000 0065 0000 0142 0000 00d7 ...H...e...B....
0000010: 0000 00f8 0000 000a ........
xxd test # with bom
0000000: fffe 0000 4800 0000 6500 0000 4201 0000 ....H...e...B...
0000010: d700 0000 f800 0000 0a00 0000 ............