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

SVN to Git Migration. How to migrate a non standard SVN layout to Git

我目前正在将 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 验证
  2. java -jar /svn-migration-scripts.jar 作者 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远程添加源https://example@bitbucket.com/projExample.git
  10. git push -u origin --all
  11. 没有任何反应。

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

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

这解决了问题,但导致命令需要 7 天才能到达 运行!这说明结构太复杂了!

因此我决定使用包含最新代码的 svn 分支作为 t运行k 成功添加了历史但没有创建所需的分支。我认为这已经足够好了,因为命令会在 2 小时内 运行。我执行的命令更像这样:

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

如果我就此向其他人提出建议,我会说直接执行上面的命令,因为它很快并且可以完成工作!

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

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