我打算制作一个开源项目的分支,但我想切换到GIT。该项目正在使用SVN,但没有可用的TRAC,因此我不能在我的PC上没有SVN的情况下下载更改集(更不用说svn diff不允许二进制补丁)。
有没有办法将我的GIT主存储库与SVN的HEAD / trunk同步而不在我的硬盘上保留另一个项目?
答案 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存储库:
将trunk作为并行分支导入现有的Git存储库
cd GIT-REPO
git svn clone --stdlayout SVN-URL .
设置移植物:
TRUNK_HEAD=`git rev-parse trunk`
MASTER_INIT=`git rev-list --reverse master | head -1`
echo $MASTER_INIT $TRUNK_HEAD >.git/info/grafts
找出要附加到主干的主分支中的范围,例如,只有从标记v2.0开始的更改才会附加到主干。
Rebase trunk
git checkout master
git rebase --onto trunk v2.0 master
提交主干
git svn dcommit
使用提示:通过使用带有git-svn的移植物,您应该确保不会dcommit
空提交。否则,dcommit
将失败。要过滤掉空提交,请尝试
git filter-branch --prune-empty
在第一次dcommit
之前。
答案 1 :(得分:1)
如果您有权访问SVN存储库,则可以在其中安装SubGit。 跑吧
$ subgit install path/to/your/svn/repostiory
所有同步都将自动执行(由SVN和Git挂钩触发)。 在这种情况下,不仅主/中继,而且所有分支都将同步(尽管您可以配置其行为)。
免责声明:我是该产品的开发者之一。