我计划做一个开源项目的分支,但我想切换到git。该项目正在使用svn,但是没有可用的trac,所以我不能在没有svn的情况下下载变更集(更不用说svn diff不允许二进制补丁)。
有没有一种方法可以同步我的git主存储库和svn的head/trunk,而不在hdd上保留另一个项目?
最佳答案
您可以使用git-svn(1)将svn与git同步。
如果您有现有的Git存储库,并且希望与另一个SvN存储库绑定,您可以尝试某种类型的Voodoo,参见http://blog.experimentalworks.net/2009/07/git-voodoo/。
该博客展示了如何将现有的非Git Svn Git存储库转换为GIT支持的GIT存储库,并创建了一个新的远程VSN存储库。您可以稍微修改Vodoo工作流,以将现有的VSN存储库导入Git存储库:
将树干作为并行分支导入到现有的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
找出要附加到trunk的master branch中的范围,例如,只有从标记v2.0开始的更改才会附加到trunk。
后备箱
git checkout master
git rebase --onto trunk v2.0 master
提交到中继
git svn dcommit
用法提示:通过将grafts与git svn结合使用,您应该确保不会
dcommit
空提交。否则,dcommit
将失败。若要筛选空提交,请尝试git filter-branch --prune-empty
在第一次
dcommit
之前。关于svn - 如何将GIT存储库与SVN同步?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5368643/