SVN到Git Migration。如何将非标准SVN布局迁移到Git

时间:2017-01-03 12:11:47

标签: git svn migration git-svn svn2git

我目前正致力于将svn源控制项目迁移到Git(BitBucket)。我已经跟随guide by Atlassian并且几乎到了最后但是在运行命令 git push -u origin --all 时遇到以下错误:

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
Everything up-to-date.

我相信这是因为SVN布局不是标准布局。我必须像这样指定主干,分支和标签:

git svn clone --trunk=/main --branches=/branches/Sprints/Iteration_1 --branches=/branches/Sprints/Iteration_2 --tags=/tags --authors-file=authors.txt svn://svn-project/projExample projExample

但我无法弄清楚如何继续并将回购推送到BitBucket。任何帮助将不胜感激!

值得注意的是,我已经尝试了命令 git push origin master 并收到以下错误:

error: src refspec master does not match any.
error: failed to push refs to '[my bitbucket origin]'.

我发现的上一个问题的示例是here。但这似乎没有帮助。也许我做错了什么?

以下是为了达到上述初始错误而运行的命令:

  1. java -jar /svn-migration-scripts.jar verify
  2. java -jar /svn-migration-scripts.jar authors svn:// svn-project / projExample> authors.txt
  3. 编辑authors.txt文件以匹配所有当前用户名称&电子邮件。
  4. git svn clone --trunk = / main --branches = / branches / Sprints / Iteration_1 --branches = / branches / Sprints / Iteration_2 --tags = / tags --authors-file = authors.txt svn:/ / svn-project / projExample projExample
  5. java -DFile.encoding = utf-8 -jar /svn-migration-scripts.jar clean-git --force
  6. git svn fetch
  7. java -Dfile.encoding = utf-8 -jar /svn-migration-scripts.jar sync-rebase
  8. java -Dfile.encoding = utf-8 -jar /svn-migration-scripts.jar clean-git --force
  9. git remote add origin https://example@bitbucket.com/projExample.git
  10. git push -u origin --all
  11. 什么都没发生。

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,我得出的结论是,这里使用的SVN结构太复杂了。我将命令更新为

git svn clone --trunk=main --branches=branches/*/* --tags=tags/* --authors-file=authors.txt svn://svn-project/projExample projExample

这解决了这个问题但导致命令运行了7天!这表明结构太复杂了!

由于这个原因,我决定使用包含最新代码的svn分支作为成功添加历史但没有创建所需分支的主干。我决定这很好,因为命令会在2小时内运行。我去的命令更像是这样:

git svn clone --trunk=branches/Sprints/Iteration_2 --authors-file=authors.txt svn://svn-project/projExample projExample.

如果我就此建议其他人,我会说要直接接受上面的命令,因为它很快就完成了工作!

以下是将SVN同步到Git仓库所需的命令。基本上你需要合并origin / trunk和master然后按

git svn fetch
git merge origin/trunk
git push origin master