25

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


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

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

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

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

临时解决方法:我快速创建了一个带有 git 扩展的还原提交并“dcommited”它。

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

  1. 了解带有重音符号的字符发生了什么
  2. 从 SVN 历史记录中检索我的工作并以适当的方式提交(如果可能,无需手动查看所有带重音符号的字符)

谁能提供一些线索(我对 git 很陌生)?

4

1 回答 1

30

现在让我们揭示一个痛苦的事实(让我的自尊心痛,而不是 git 用户):我确实弄乱了口音,而不是 git。

我本可以删除让我们错误地认为 git 会弄乱口音的问题,但考虑到赞成票的数量,我认为很多人都犯了和我一样的错误,所以我选择回答我自己的问题确定真相,并可能在同样的情况下帮助人们:

  1. Git 不会触及除换行符以外的字符。
  2. 我在提交之前打破了口音,我没有注意到它,因为我没有给予足够的关注。为此,我使用 eclipse 编辑了一些文件。Eclipse 无法识别编码,并且重音在保存时都被一个奇怪的字节序列替换。就这样。

再次感谢Dmitry Pavlenko为我提供了有关如何调查此问题的指示。

+1 到“git reflog”

快乐的口音修复;=)

于 2012-05-18T08:41:02.447 回答