我现在在以下工作流程中使用 git-svn
git clone <SVN TRUNK URL> #done once
随后当我处理一个功能时
git branch featureZ
git checkout featureZ
#make edits for featureZ
git commit
git checkout master
git svn rebase # fetch changes from server
git checkout featureZ #go back to branch
#git merge master
git rebase master #get the changes from SVN->master onto the branch now. Optional if I want the branch to be current. (EDITED: Got from the answer given below)
#make edits for featureZ
git commit #featureZ completed
git checkout master
git merge featureZ #getting featureZ onto master. Prepare to send to SVN
git svn dcommit #push featureZ back to SVN
现在,当我对 master 进行 git merge 功能时,需要注意一些 Gist ,featureZ 分支中的所有单独提交都会 merge 为一个,这对我来说很好。
提交消息被替换为“与 featureZ merge ”。这可以用 merge fmt msg 修复.
现在我的问题是 此工作流程是否有任何可能出错或需要处理的地方。我读了 git-svn manual使用 git svn 时不应进行 merge 。我在我的工作流程中所做的就是他们所指的吗?如果是这样,它会导致什么样的问题?一件事是我不想做一些会扰乱 SVN 主线的事情。
最佳答案
SVN 不能处理非线性历史(它根本没有它的符号)。所以你想要做的是一个 rebase 而不是 merge ,因为它保留了 SVN 的线性历史(这在 git-svn 手册页 here 中指出。
详细来说,线性历史是微不足道的。他们走直线(A 到 B 到 C 到 D)。而非线性历史可以从(A 到 B 到 C,B 到 D,然后 C + D 到 E——换句话说,它们会长出分支)。
rebase 会给你一个线性的历史。请记住, rebase 应该从您的私有(private)本地分支机构完成。例如,如果您有 2 个分支:master 和 experimental。您将 checkout 实验并最好使用 -i 标志执行“git rebase master”。以相反的方式进行可能会导致不良的副作用。
然后您就可以检查 master 并 merge 来自实验分支的更改。您的历史应该保持线性。
关于git svn 工作流程 - 功能分支和 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1129688/