gpt4 book ai didi

git - 将源代码文件的 Git 存储库从 ISO-8859-1 编码切换为 UTF-8 编码

转载 作者:太空狗 更新时间:2023-10-29 13:58:08 26 4
gpt4 key购买 nike

本周末我将使用 fast-export 将一个大型 Mercurial 项目转换为 Git .我已经对此进行了多次测试,结果很好。

我们还想将我们的源代码编码(很多德语注释/带变音符号的字符串文字)从 ISO-8859-1 转换为 UTF-8(存储库中的所有其他非 java 文件应保持原样),并且 Git 迁移为我们提供了一个机会,因为无论如何每个人都需要再次克隆。但是,我没有找到一个好的方法。

  1. 我试过 git filter-tree --tree-filter ...来自 this comment on SO 的方法.然而,虽然这看起来很理想,但由于存储库的大小(大约 200000 次提交,18000 个代码文件),这将花费比我周末更多的时间。我尝试过直接从具有 72 个内核的 Linux VM 上的 64GB tmpfs 卷运行它(在高度优化的版本中,文件列表被分块并且子列表被并行转换(使用 GNU parallel ))需要几天...
  2. 或者,我尝试了一种简单的方法,即在任何事件分支上单独执行转换并提交更改。然而,结果并不令人满意,因为在 merge 或挑选转换前提交时,我几乎总是会遇到冲突。
  3. 现在我再次运行方法 1,但不尝试重写所有分支的完整历史记录(--all<rev-list>),而是仅重写当前事件分支可访问的所有提交,而过去的一些提交无法访问是(希望)所有当前分支的前身( branch-a branch-b branch-c --not old-tag-before-branch-a-b-c-forked-off 作为 <rev-list> )。它仍在运行,但我担心我不能真正相信结果,因为这似乎是一个非常糟糕的主意。
  4. 我们可以像方法 2 一样通过正常提交切换 master 分支中的编码,但这同样会使从/到 master 的 cherry-picking 修复成为一场灾难。而且它会引入很多编码问题,因为开发人员在主分支和非转换分支之间切换时肯定会忘记更改他们的 IDE 设置。

所以现在,我觉得最好的解决方案可能就是坚持使用 ISO-8859-1。

有人有想法吗?有人提到也许reposurgeon基本上可以使用它的方法 1 transcode性能远优于 git filter-tree --tree-filter ... 的操作但我不知道它是如何工作的。

最佳答案

git filter-branch 中的树过滤器本质上很慢。它的工作原理是将每个提交提取到一个临时目录中的完整树中,让您更改每个文件,然后找出您更改的内容并从您留下的每个文件中进行新提交。

如果您通过快速导出/快速导入导出和导入,将是转换数据的时间:您在内存中有文件的扩展数据,但不在内存中文件系统形式,然后将其写入导出/导入管道。此外,git fast-import 本身是一个 shell 脚本,因此在其中插入过滤是微不足道的,而 hg-fast-export 是一个 Python 程序,因此在其中插入过滤是微不足道的以及。明显的地方是 here : 只需重新编码 d

关于git - 将源代码文件的 Git 存储库从 ISO-8859-1 编码切换为 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50754598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com