所以我使用git并与svn repo进行交互。
我有一个svn TRUNK,看起来像这样:
A-B-C-D
和一个svn bug_fixes分支在提交B或C分支:
-c-d-e-f-g-h-i
现在我需要将我的svn分支中的cdefghi提交返回到主分支。
我知道我可以做一个被压扁的提交,让我们称之为壁球SQUASH(它将包含cdefghi),但后来似乎我必须杀死bug_fixes分支并启动一个新分支才能干净地继续。
这里: http://blog.red-bean.com/sussman/?p=92 他们建议:
checkout
分支。
merge
主人的变化进入分支。
Checkout
大师。
merge --reintegrate
分支机构对主人的改变。
继续发展。
不幸的是,git-svn似乎没有认识到svn的任何“merge --reintegrate”命令。
那么我如何干净地使分支和master拥有所有提交,以便使用git-svn的命令继续开发两者?
该 警告部分 git-svn
文件 警告
为了简化和与功能较弱的系统(SVN)进行互操作,建议全部使用 git svn
用户 clone
, fetch
和 dcommit
直接来自SVN服务器,避免全部 git clone
/pull
/merge
/push
git存储库和分支之间的操作。
作者提供了一个建议:
在git分支和用户之间交换代码的推荐方法是 git format-patch
和 git am
, 要不就 dcommit
进入SVN存储库。
适应您的情况
git format-patch --stdout c^..i >my.patch
git reset --hard trunk
git am <my.patch
哪里 c
和 i
是历史记录中提交的适当标识符。
好的,我找到了一些方法:
git checkout your_branch
git rebase master
git checkout master
git merge your_branch
要么
git checkout your_branch
git rebase master
git checkout master
git merge --squash your_branch
要么
git checkout your_branch
git rebase master
git checkout master
git rebase -i your_branch
毕竟那之后。
git svn dcommit (to commit to master)
git branch -D your_branch
然后(从svn因为git-svn不支持删除)删除分支,
并从主干重新创建它并重新开始循环。
这不是一个改变当地东西的好例子(<branchpoint>..i
)从SVN获取的新主服务器?
如果您提交合并,它会自动将其压缩为1次提交。遗憾的是它没有在内部使用svn:mergeinfo或--reintegrate,因此你失去了与通过'git svn branch'创建的分支的关联。
你还能做的是 摘樱桃,只要你不会使用 合并。
两个语句都应该在没有更改的分支上完成。
假设c比我年长并且您想要采用整个序列。
git cherry-pick c..i
或单独提交
git cherry-pick c d e f g h i