是什么导致git混乱字符编码?

时间:2012-05-16 17:21:11

标签: git encoding character-encoding git-svn git-extensions

编辑: git不会破坏字符编码。这仍然是为了分享知识并避免其他人犯同样的错误。


上下文:我的企业使用svn存储库。我使用git-svn作为客户端与此存储库进行交互。项目中的所有文本文件都是(并且必须)使用Windows默认编码(cp -....)进行编码。我使用git-extensions,有时使用命令行来导航git。

我做了什么:在过去的3天里,我正在开发一项新功能,并且我做了很多本地提交。最后,我使用交互式rebase将所有这些提交压缩成一个,然后我使用git svn dcommit在一次提交中推送svn存储库中的所有内容。

当时发生的事情:一位同事告诉我,所有的口音都在我修改过的文件中,在我提交后的新文件中搞砸了。我之前已经安装了git + svn,已经在同一个存储库中提交了带重音的文本文件,这是我第一次遇到这个问题。

我的调查:我做了以下事情来调查:用notepad ++打开文件,并尝试使用最新的编码(包括Windows默认和UTF-8)来查看它们:没有一个可以正确显示重音,不同的重音总是由相同的奇怪字形序列呈现。

临时解决方法:我使用git扩展和" dcommited"快速创建了一个还原提交。它。

问题:我的企业svn存储库没问题,但现在我要解决以下两个问题:

  1. 了解带有重音字符的字符发生了什么
  2. 从SVN历史记录中检索我的作品并以正确的方式提交(如果可能的话,不用手动查看带有重音符号的所有字符)
  3. 任何人都可以提供一些线索(我对git来说比较新)?

1 个答案:

答案 0 :(得分:22)

现在让我们揭示痛苦的事实(对我的自负感到痛苦,而不是git用户): 我确实搞乱了口音,而不是git。

我本可以删除那个错误地认为git可以搞砸口音的问题,但考虑到upvotes的数量,我认为比很多人犯了同样的错误,所以我选择回答我自己的问题是确定真相,也许在同样的情况下帮助人们:

  1. Git不会触及换行符以外的字符。
  2. 我在提交之前打破了重音,我没有注意到它,因为我没有给予足够的重视。为此,我用eclipse编辑了一些文件。 Eclipse无法识别编码,并且重音已全部替换为保存时的奇怪字节序列。就是这样。
  3. 再次感谢Dmitry Pavlenko向我提供有关如何调查此问题的说明。

    +1到“git reflog”

    快乐的口音修复; =)