Tas*_*orn 5 git encoding utf-8 iso-8859-1 reposurgeon
本周末我将使用fast-export将一个大型 Mercurial 项目转换为 Git 。我已经测试了几次,结果很好。
我们还想将我们的源代码编码(大量带有变音符号的德语注释/字符串文字)从 ISO-8859-1 转换为 UTF-8(repo 中的所有其他非 Java 文件应保持原样),并且Git 迁移让我们有机会现在就这样做,因为无论如何每个人都需要再次克隆。但是,我没有找到一个好的方法。
git filter-tree --tree-filter ...方法SO。然而,虽然这看起来很理想,但由于存储库的大小(大约 200000 次提交,18000 个代码文件),它需要的时间比我周末的时间长得多。我试过直接从具有 72 个内核的 linux VM 上的 64GB tmpfs 卷运行它(在一个高度优化的版本中,文件列表被分块,子列表被并行转换(使用GNU 并行),但它仍然会需要几天...--allas <rev-list>),而是所有提交都可以从当前活动分支到达,并且无法通过某些过去的提交到达,这(希望)是所有当前分支的前身分支(branch-a branch-b branch-c --not old-tag-before-branch-a-b-c-forked-off作为<rev-list>)。它仍在运行,但我担心我不能真正相信结果,因为这似乎是一个非常糟糕的主意。所以现在,我觉得最好的解决方案可能是坚持 ISO-8859-1。
有没有人有想法?有人提到,也许reposurgeon基本上可以使用它的transcode操作来做方法 1 ,git filter-tree --tree-filter ...但我不知道它是如何工作的。
树过滤器git filter-branch本质上很慢。它的工作原理是将每个提交提取到临时目录中的完整树中,让您更改每个文件,然后找出您更改的内容并从您留下的每个文件中进行新的提交。
如果您通过快速导出/快速导入来导出和导入,则需要转换数据:在将文件写入到内存中之前,内存中有文件的扩展数据,但不是文件系统形式。出口/进口管道。此外,git fast-import它本身是一个 shell 脚本,因此在那里插入过滤很简单,并且hg-fast-export它是一个 Python 程序,因此在那里插入过滤也很简单。明显的地方就在这里:只需重新编码d。
| 归档时间: |
|
| 查看次数: |
3448 次 |
| 最近记录: |