如何将GIT存储库与SVN同步?

时间:2011-01-08 10:41:54

标签: svn git repository

我打算制作一个开源项目的分支,但我想切换到GIT。该项目正在使用SVN,但没有可用的TRAC,因此我不能在我的PC上没有SVN的情况下下载更改集(更不用说svn diff不允许二进制补丁)。

有没有办法将我的GIT主存储库与SVN的HEAD / trunk同步而不在我的硬盘上保留另一个项目?

2 个答案:

答案 0 :(得分:4)

您可以使用git-svn(1)将GDN与Git同步。

如果您有现有的Git存储库,并且想要与另一个SVN存储库绑定,您可以尝试某种伏都教,请参阅http://blog.experimentalworks.net/2009/07/git-voodoo/

该博客展示了如何使用新创建的远程SVN存储库将现有的非git-svn Git存储库转换为支持git-svn的Git存储库。您可以稍微修改voodoo工作流程,以将现有的SVN存储库导入Git存储库:

  1. 将trunk作为并行分支导入现有的Git存储库

    cd GIT-REPO
    git svn clone --stdlayout SVN-URL .
    
  2. 设置移植物:

    TRUNK_HEAD=`git rev-parse trunk`
    MASTER_INIT=`git rev-list --reverse master | head -1`
    echo $MASTER_INIT $TRUNK_HEAD >.git/info/grafts
    
  3. 找出要附加到主干的主分支中的范围,例如,只有从标记v2.0开始的更改才会附加到主干。

  4. Rebase trunk

    git checkout master
    git rebase --onto trunk v2.0 master
    
  5. 提交主干

    git svn dcommit
    
  6. 使用提示:通过使用带有git-svn的移植物,您应该确保不会dcommit空提交。否则,dcommit将失败。要过滤掉空提交,请尝试

    git filter-branch --prune-empty
    

    在第一次dcommit之前。

答案 1 :(得分:1)

如果您有权访问SVN存储库,则可以在其中安装SubGit。 跑吧

$ subgit install path/to/your/svn/repostiory

所有同步都将自动执行(由SVN和Git挂钩触发)。 在这种情况下,不仅主/中继,而且所有分支都将同步(尽管您可以配置其行为)。

免责声明:我是该产品的开发者之一。

相关问题