双向Git< - > Svn Sync(都是可写的)可能吗?

时间:2011-03-09 05:50:21

标签: svn git

我们团队的一部分发现git非常酷,并开始将其用作svn客户端。所以每个开发人员都有一个本地git存储库,并通过git-svn与svn同步。

然后我们想对提交进行代码审查,并向同事发送补丁以供审核。这种方法不是很直观,因为svn中 SAME 修订版的校验和对于每个本地git存储库都是不同的。不知道为什么,因为内容应该是相同的。也许这是svn rebase中的错误?

因此我们尝试在scm服务器上安装一个中央git存储库。现在每个使用git的开发人员都可以将他的更改推送到这个中央存储库,而另一个进行审查的开发人员可以将这些更改到他的repo中。不幸的是,因为每个开发人员都同时遇到svn rebase校验和问题。

在阅读了很多帖子后,我认为管理包含subversion和git客户端的团队的最佳方法是:

  1. 中央Subversion存储库
  2. 中央Git存储库(源)
  3. 服务器上的中央Git工作副本
  4. 为每个git开发人员提供本地git存储库
  5. 为每个svn开发人员提供一份普通的工作副本
  6. 现在我们需要一个集中的工作来同步svn和git在服务器上的中央git工作副本上执行这样的常规脚本。

    # First transfer the commits from git to svn
    git checkout svnmaster
    git pull origin svnmaster
    git svn dcommit
    
    # Now from svn to git
    git svn rebase
    git push origin svnmaster
    

    我现在的问题是:

    1. 这是最好的方法(没有切换到git completeley)
    2. 是否已有用于执行同步防弹的Windows脚本?
    3. 是否存在不同校验和的问题,可能存在问题    已知的解决方法?
    4. 感谢您的每一个答案!

      修改 我最近发现了一个看起来非常有希望的项目:

      SubGit

2 个答案:

答案 0 :(得分:5)

您的解决方案存在问题。我建议你不要直接在svnmaster中提交。你应该为svn(svn-dev)和svn跟踪分支(svn-master)提供一个纯git分支。按照以下步骤提交svn:

git checkout svn-master
git merge --no-ff svn-dev
git svn dcommit
git checkout svn-dev
git merge svn-master

此序列允许您保留所有存储库的提交哈希值。

答案 1 :(得分:2)

一般来说,不建议您做什么(至少可以说:真实的陈述更像是“不要”)。

我实际上尝试过一段时间做类似的事情,我们有一个svn树的离线git副本,我们一起工作。虽然它可以很好地跟踪上游SVN的变化,但是它无法尝试重新进入SVN树(如果你正在使用git分支做任何事情,那么完全忘记它。)

仔细阅读git-svn手册页。它反复声明git-svn!= git。具体而言,git-svn<<饭桶。当然,它比SVN本身更好,但将它视为SVN存储库的完整“git clone”是不安全的,在那里你可以做你想做的任何事情并将其推回去。

作为示例,请考虑需要进行更改的审阅者。他进行了更改,将结果推回到git repo,原始作者检查了所审查的更改,并且原作者执行了dcommit。请记住,唯一的SVN身份验证来自git-svn客户端,因此原始作者是“将更改提交到SVN树”,因此获取所有内容的所有权。当你让多个人同时将工作交给git repo时会变得更糟。第一个执行dcommit的人(如果它确实有效,并且很可能不会)取得所有更改的所有权。