2

我即将将我的 git repo 转换为 hg repo。

问题是几个月前添加了一个名为'favicons/Icon\r'git repo 的文件,这对 git 来说很好。该文件已被删除,但由于它在历史记录中,因此在运行hg convert扩展程序时会得到以下输出:

converting...
816 Favicons
transaction abort!
rollback completed
abort: '\n' and '\r' disallowed in filenames: 'favicons/Icon\r'!

有没有办法解决这个问题,还是我必须留在我的 git repo 上?非常感谢!

4

2 回答 2

2

由于该路径名在 Mercurial 中无效,因此您必须执行以下一项或多项操作:

  • 使用跳过“错误”提交和/或文件的代码转换 Git 存储库
  • 使用替换为“好”文件名的代码转换 Git 存储库
  • 将 Git 存储库复制到已更改的 Git 存储库,其中不显示文件名(删除或更改具有该文件的提交,前两种方法,但在 Git 中而不是在转换为 Mercurial 期间进行)。

前两个直接使用可能很容易实现hg convert。例如,文档提到了通过文件名排除或重命名文件的能力。不过,我自己并没有真正尝试过。

最后一个相对容易,因为您可以使用git filter-branch它来实现它。“相对容易”中的“相对”是非常相对的:filter-branch不是特别容易正确使用(它比编写新的 Git-to-Mercurial 转换器更容易)。

请参阅如何从 Git 存储库的提交历史记录中删除/删除大文件?从所有 Git 存储库提交历史记录中完全删除文件作为示例。请注意,Greg Bacon 的答案正确地用于--tag-name-filter调整标签(如果您的标签指向历史记录,在复制期间更改提交的位置或之后的位置,这是必要的)。

于 2016-10-06T07:45:06.803 回答
1

我是这样解决的:

echo "exclude \"favicons/Icon"$'\r'$"\"" >> omit
hg convert --filemap omit mygitrepo myhgrepo
于 2016-10-06T11:19:55.383 回答