【发布时间】:2013-09-19 12:52:56
【问题描述】:
我的 Git 存储库中有一个包含多个提交的文件,它以 16 位 Unicode (UCS-2) 编码,供 Windows 使用。
因此,Git 将其视为二进制文件,而不是文本文件,我看不到不同提交所做的更改。
有没有办法将该文件追溯转换为 UTF-8,即重建历史记录,就好像该文件一直是 UTF-8 一样,我一直将它作为 UTF-8 文件提交,而不是 16 -bit Unicode 文件?
【问题讨论】:
我的 Git 存储库中有一个包含多个提交的文件,它以 16 位 Unicode (UCS-2) 编码,供 Windows 使用。
因此,Git 将其视为二进制文件,而不是文本文件,我看不到不同提交所做的更改。
有没有办法将该文件追溯转换为 UTF-8,即重建历史记录,就好像该文件一直是 UTF-8 一样,我一直将它作为 UTF-8 文件提交,而不是 16 -bit Unicode 文件?
【问题讨论】:
要追溯重新编码文件,请使用git filter-branch:
git filter-branch --tree-filter 'recode utf-16..utf-8 file'
如果您没有recode,请改用较长的iconv -f utf-16 -t utf-8 file -o file。如果文件在树的早期版本中不存在,您可能需要附加 || true 以便重新编码命令不会失败,并且可以选择抑制错误输出。
【讨论】:
git filter-branch --tree-filter 'recode utf-16..utf-8 relative/path/to/file'。起初这让我很困惑。
iconv 命令中的utf-16,你想要UCS-16LE。
iconv 中指定 UTF-16 实际上不起作用吗?
UTF-16LE 吗?这至少应该和 UCS-2LE 一样好用,只是没有提到过时的“UCS-2”名称。