如何在GIT和SVN之间进行双向同步

时间:2017-12-02 19:14:07

标签: git svn git-svn

如何在GIT存储库和SVN存储库之间进行双向同步?我已经看到了如何从SVN转换为GIT,但没有太多关于如何在两者之间平滑同步的方法。

目的是将项目保存在两种类型的存储库中,并让它们生成/跟踪相同的内容。

作为额外要求,作为主题的SVN存储库不包含主干和分支。

2 个答案:

答案 0 :(得分:3)

您需要专用的第三方工具,以确保SNV和Git存储库之间的真正双向同步。

我只知道SubGit能够可靠地做到这一点。但它不是免费的。只有从SVN到Git的一次性迁移才是。

答案 1 :(得分:0)

这篇文章 - Creating a two way sync between a Github repository and Subversion - 看起来是一个解决方案:

  • 在github服务器或bitbucket服务器上创建一个git repo。克隆空的回购。添加一个readme-git文件并在master上提交。

  • 最初创建svn跟踪分支:

    git branch --no-track svnsync
    git checkout svnsync
    git svn init http://your-svn-server/your-repo
                # here removed  `-s`  if the svn repo is not on a standard layout
                # or use file:///path/to/local/repo
    git svn fetch
                # add if needed  `--authors-file svn-authors.txt`
    git reset --hard remotes/git-svn
                # the post said `remotes/trunk` but it does not look right
  • 从svn同步到git:
    git checkout svnsync
    git svn rebase
    git checkout master
    git merge svnsync
                # add  `--allow-unrelated-histories`  to the first merge
    git push origin master
  • 从git同步到svn:
    git checkout master
    git pull origin master
    git checkout svnsync
    git svn rebase
    git merge --no-ff master
    git commit
    git svn dcommit

上述序列的缺点是添加了伪造的readme-git文件,以便可以拉出非跟踪分支。我猜,从最初从svn repo克隆的git repo开始可以避免这个问题。