git svn 工作流程 - 功能分支和 merge

标签 git version-control git-svn

我现在在以下工作流程中使用 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/

相关文章:

version-control - 在 REST 中建模版本控制操作

version-control - 在 RCS 中使用文件夹

svn - 如何使用 git-svn 跟踪仅限本地的更改/更改集?

git - 在现有的 SVN 仓库上使用 git

git-svn 单个 svn 服务器,多个 svn 目录作为多个 git 远程

eclipse - 这个图标在 Eclipse Project Explorer(带有向上箭头的数字)中意味着什么?

git - 指定 Bower 注册表的 git 分支

ruby-on-rails - Git & Rails——我搞砸了,我能恢复到上次提交吗(删除模型/ Controller /迁移/代码)

git - 在 Ubuntu box 上创建本地 Git 仓库

git如何在不同的分支中保持不同的配置文件?