Checkin使用git更改为UTF8 BOM

时间:2011-06-20 20:09:35

标签: git utf-8 byte-order-mark

我意外地检查了来自Windows的utf8编码文本文件而没有删除之前的BOM。现在我尝试在更高版本中删除它并再次签入此更改。似乎git忽略了对BOM字节的更改。是否有设置让git让我签入文件就好了? (我知道在线路结尾方面存在类似的问题 - 而且这个问题有一个设置......)

坦克为你提供帮助!

西蒙

3 个答案:

答案 0 :(得分:2)

如果你可以使这个可重复,一定报告错误

这是我的两分钱:

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

这是在ubuntu 64位上使用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            ............

答案 1 :(得分:0)

git不会忽略字节顺序标记(BOM)序列,并且可以git只提交BOM删除。用xml UTF-8测试过

通过文件->另存为->使用编码保存-> Unicode(UTF-8不带签名)在Visual Studio 2017中删除Windows上的BOM。 git看到了更改并且可以提交

答案 2 :(得分:-1)

如果找不到合适的解决方案,您可以随时在文件中添加字符,提交,删除BOM和字母,并修改提交。