hg convert abort:' \ n'和' \ r'在文件名中不允许:

时间:2016-10-06 06:42:22

标签: git mercurial

我即将将我的git repo转换为hg repo。问题是几个月前有一个名为' favicons / Icon \ r'到git repo,这对git来说很好。该文件已被删除,但由于它在历史记录中,因此在运行hg convert extension时会得到此输出:

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

有没有办法解决这个问题,还是我必须继续使用我的git repo?非常感谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

有关示例,请参阅How to remove/delete a large file from commit history in Git repository?Completely remove file from all Git repository commit history。请注意,Greg Bacon's answer正确使用--tag-name-filter来调整标记(如果您在复制期间更改提交的位置或之外指向了历史记录,则必须使用此标记。)

答案 1 :(得分:1)

我这样解决了:

echo "exclude \"favicons/Icon"$'\r'$"\"" >> omit
hg convert --filemap omit mygitrepo myhgrepo