我有一个大型 CVS 存储库,其中包含 ISO-8859-1
中的文件,我想将其转换为 git。
当然,我可以将 git 配置为使用 ISO-8859-1
进行编码,但我想使用 utf8
。
现在,借助 iconv
或 recode
等工具,我可以转换工作树中文件的编码。我可以使用类似 converted encoding
的消息来提交它。
我现在的问题是,是否可以转换完整的历史记录?从 cvs 转换为 git 时或之后。我的想法是编写一个脚本来读取 git 存储库中的每个提交并将其转换为 utf8
并将其提交到新的 git 存储库中。
这可能吗(我不确定哈希码以及如何遍历提交、分支和标签)。或者是否有可以处理此类问题的工具?
最佳答案
您可以使用 git filter-branch
执行此操作。这个想法是您必须在每次提交中更改文件的编码,并在进行时重写每个提交。
首先,编写一个脚本来更改存储库中每个文件的编码。它可能看起来像这样:
#!/bin/sh
find . -type f -print | while read f; do
mv -i "$f" "$f.recode.$$"
iconv -f iso-8859-1 -t utf-8 < "$f.recode.$$" > "$f"
rm -f "$f.recode.$$"
done
然后使用 git filter-branch
一遍又一遍地运行这个脚本,每次提交一次:
git filter-branch --tree-filter /tmp/recode-all-files HEAD
其中 /tmp/recode-all-files
是上面的脚本。
在存储库刚从 CVS 升级之后,您可能在 git 中只有一个分支,其线性历史可以追溯到一开始。如果您有多个分支,您可能需要增强 git filter-branch
命令来编辑所有提交。
关于git - 转换git仓库文件编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052199/