【发布时间】:2018-05-17 15:58:18
【问题描述】:
我正在尝试使用svn2git(在我的 Windows 机器上)使用以下命令将旧的 SVN 存储库迁移到 GIT:
svn2git https://my/svn/url --verbose --authors authors.txt
一切正常,直到我遇到以下错误:
fatal: Not a valid object name refs/remotes/svn/VS2010 Port
cat-file commit refs/remotes/svn/VS2010 Port: command returned error: 128
似乎有人(很久以前)创建了一个名称中带有空格的分支,这对进程造成了严重破坏。运行 git branch -a 会显示有问题的分支:
remotes/svn/VS2010%20Port
我在 Google 和 StackOverflow 上进行了一些搜索,发现了一些帖子,包括 one(尽管它指的是标签)。
首先我尝试了使用git branch -r -d svn/VS2010%20Port 删除分支的建议(保留此分支并不重要),然后我重新运行了svn2git 命令。它开始运行并最终失败并出现相同的错误。我还尝试删除分支并将标志 --exclude '.*VS2010.*' 添加到我的 svn2git 命令中,但这没有帮助:
svn2git https://my/svn/url --verbose --authors authors.txt --exclude '.*VS2010.*'
接下来,我尝试了另一个建议,即运行 mv 命令将名称中带有 %20 的文件/目录移动到具有实际空格的文件/目录:
mv VS2010%20Port VS2010\ Port
由于我的问题不在于标签,我不是 100% 可以在哪里运行它,但我在以下位置进行了尝试:
- .git\svn\refs\remotes\svn
- .git\refs\remotes\svn
- .git\logs\refs\remotes\svn
当我之后运行svn2git 命令时,我最终遇到了同样的问题。
最后我找到了this post,它专门针对分支,但解决方案是编辑packed-refs 文件并将%20 替换为空格。虽然我没有看到这里列出的VS2010%20Port 分支,所以我无法通过这个解决方案。
是否有人对我可以尝试或可能错过的事情有任何建议?
更新:
通过添加带有匹配VS2010 Port 字符串的正则表达式的--ignore-refs 标志,我能够取得一些进展。它是一个大型存储库,因此花了很长时间,但最终似乎完成了。不幸的是,我在目录中没有看到任何文件(只是.git 目录),所以我假设出了点问题。我决定退后一步,重新尝试使用git svn clone 命令,这次我从一开始就提供了--ignore-refs 和--ignore-paths 标志。希望这次我能取得更好的成绩。
【问题讨论】:
-
您的问题解决了吗?
-
我会更新问题。
-
如果直接使用
git svn clone命令呢? -
我现在正在测试的 :D
-
使用命令
git svn clone https://my/svn/url --trunk='trunk' --branches='branches' --tags='tags'可以将所有分支迁移到git repo中(包括VS2010 Port)。而如果要切换到分支VS2010 Port,可以使用命令git checkout -b branchname remotes/origin/VS2010%20Port。如果迁移过程中有任何问题,请随时告诉我:)
标签: git version-control git-svn svn2git