2016-10-06 37 views
1

我正要将我的git repo转换为hg repo。问题是几个月前有一个文件为git repo添加了一个名为'favicons/Icon \ r'的文件,这对git来说很好。该文件已被删除,但因为它是在历史上我跑了汞转换扩展时,得到如下的输出:hg convert abort:' n'和' r'在文件名中不允许使用:

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

有没有办法来解决这个还是我必须留在我的混帐回购协议?非常感谢!

回答

2

由于该路径名在Mercurial是无效的,你必须做一个或多个以下:

  • 转换Git仓库与跳过“坏”的承诺和/或文件中的代码
  • 转换Git存储库,替换代替“好”文件名的代码
  • 将Git存储库复制到更改的Git存储库中,其中文件名不会出现(删除或更改具有该文件的提交,前两种方法,但是在Git中而不是在Mercurial转换过程中)。

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

最后一个比较容易,因为您可以使用git filter-branch来实现它。 “相对容易”中的“相对”是很有相对:filter-branch并不是特别容易正确使用(这比编写新的Git到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来调整标记(如果您有在复制过程中更改提交点时或超出提交点的历史的标记,则这是必需的)。

+0

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

1

我解决这样说:

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