将一个Subversion仓库转换为Git时,为什么会出现“fatal: not a valid object name”错误?

5

在将Subversion存储库转换为Git时,我看到了以下输出。

> Found possible branch point: <repo-url>/trunk => <repo-url>/branches/CMT_PHASE3, 18441
> fatal: Not a valid object name refs/remotes/BlueSimViewer 5.0 20110316 Branch
> cat-file commit refs/remotes/BlueSimViewer 5.0 20110316 Branch: command returned error: 128

我正在运行的命令来转换存储库是:
> git svn clone <repo-url> -A authors-transform.txt --stdlayout converted-git > svnlog

这个过程已经转换了117个分支,其中一些分支名称中包含空格。我首先发现了这个 SO 问题,它帮助我从之前的一个由 git 1.8.x.x 解决的问题上继续前进。
非常感谢任何关于问题原因和可能解决方法的见解。
我在 Ubuntu 12.10 服务器上运行 git 版本 1.8.1.1。如果需要其他有用的信息,我很乐意提供。

分支名称中真的有空格吗? - Stefan Näwe
实际上,我已经仔细检查了服务器,最接近的分支名称是:BlueSimViewer5.0_20110316_Branch。 - XBigTK13X
你可以尝试使用SubGit进行转换,它有自己的转换引擎,因此我认为你不会遇到这样的错误。 - Dmitry Pavlenko
我注意到你的个人资料中有subgit.com。我感谢你诚实地尝试解决我提出的问题,但是你的回答并没有为解决我遇到的问题提供任何帮助。据我所知,SubGit是一个闭源工具,允许人们继续运行Subversion。我们完全放弃了那个版本控制系统,这使得SubGit成为一个不符合我的需求的项目。 - XBigTK13X
@Stefan:我应该提到,有些分支的名称实际上包含空格(例如:日期补丁)。 - XBigTK13X
@XBigTK13X 目前大多数的 SVN->Git 转换工具(如 svn2git 或 git-svn 桥接器)都是使用 git-svn 作为转换引擎,因此如果您找不到让 git-svn 工作的解决方案或者需要花费太多精力,您可以尝试我提出的工具(是闭源的,但仅用于转换目的是免费的,即您的情况)。如果这些信息对您没有帮助,我可以删除我的评论。 - Dmitry Pavlenko
2个回答

8
可能现在已经晚了,但我想我找到了一个至少有点奇怪的解决方案。
打开你提到的文件git-repo-name/.git/packged-refs,将其中的%20替换为空格,保存文档,然后再试一次。对我有效。
使用Notepad++以UTF-8编辑。
Git版本:git version 2.6.2.windows.1(通过git bash在win 7 64x上)。

1
看起来它能够工作。我按照这个步骤对一个9年历史的SVN仓库进行了转换。我不得不运行git svn clone大约10次才能捕捉到标签名称中所有%20的实例。 - bjaastad_e
1
第二个观察结果是,在我第一次运行之后,进程日志中出现了一系列“忽略损坏名称的参考”的警告。我清除了克隆并再次运行,此后就没有收到命名警告。我刚刚完成转换,所以我还不确定克隆是否完全正常,但就我目前所看到的而言,它似乎是正确的。 - bjaastad_e

6
我找到了一个解决方案,但是对结果并不满意。如果有人能够提供一种在不忽略有问题的分支的情况下完成此操作的方法,那么我很乐意接受他/她的答案。
针对每个导致出现错误的分支/标签,请打开以下文件。
git-repo-name/.git/packged-refs

请在包含有问题分支/标签的行首打上井号(#)。

例如,在我的问题中:

b88c4df0d47a9ca43c2d0ffd4a1f6e471f98aebc refs/remotes/BlueSimViewer%205.0%2020110316%20Branch

变成

#b88c4df0d47a9ca43c2d0ffd4a1f6e471f98aebc refs/remotes/BlueSimViewer%205.0%2020110316%20Branch

这将把该行标记为注释,git会在忽略有问题的分支的同时继续进行转换过程。

在撰写答案时,我仍在进行转换。虽然这种解决方案意味着会漏掉一些分支,但至少我知道哪些分支不在其中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接