我要把我的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?谢谢!
最佳答案
由于该路径名在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
来调整标记(如果您有指向历史记录的标记,则在复制过程中更改提交的点或之后,这是必需的)。
关于git - hg convert abort:文件名中不允许使用'\n'和'\r':,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39889203/