Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git hg转换中止:'\n';和'\r';在文件名中不允许:_Git_Mercurial_Mercurial Convert - Fatal编程技术网

Git hg转换中止:'\n';和'\r';在文件名中不允许:

Git hg转换中止:'\n';和'\r';在文件名中不允许:,git,mercurial,mercurial-convert,Git,Mercurial,Mercurial Convert,我将把我的git回购转换成hg回购 问题是几个月前,有一个名为“favicons/Icon\r”的文件添加到git repo中,这对git来说很好。该文件已被删除,但由于它位于历史记录中,因此在运行hg convert扩展名时,我会得到以下输出: converting... 816 Favicons transaction abort! rollback completed abort: '\n' and '\r' disallowed in filenames: 'favicons/Icon\

我将把我的git回购转换成hg回购

问题是几个月前,有一个名为“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回购?非常感谢

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

  • 使用跳过“错误”提交和/或文件的代码转换Git存储库
  • 使用代码转换Git存储库,替换为“良好”的文件名
  • 将Git存储库复制到修改后的Git存储库中,其中不显示文件名(删除或修改包含该文件的提交,但在Git中执行,而不是在转换为Mercurial期间)
使用
hg convert
可以很容易地直接实现前两个。例如,提到了按文件名排除或重命名文件的功能。不过,我自己并没有真正尝试过

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

有关示例,请参见和。请注意,正确使用
--tag name filter
来调整标记(如果您的标记指向历史记录中在复制过程中更改提交的点或超出该点,则这是必要的)。

我这样解决了这个问题:

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

谢谢我使用您链接的文档中的--filemap解决了这个问题。