这是我的正常工作流程混帐SVN:混帐:更有效的方式来做到这一点
- 创建一个分支的一个问题
- 做分支一些工作
- 结账主 后提交
- SVN变基
- 结帐分支
- 底垫主
- 结帐主
- 合并分支
- dcommit
我在这里的目标是保持在一条直线上我的历史,同时也试图尽量减少合并的头痛。
有没有办法用较少的步骤做到这一点?
这是我的正常工作流程混帐SVN:混帐:更有效的方式来做到这一点
我在这里的目标是保持在一条直线上我的历史,同时也试图尽量减少合并的头痛。
有没有办法用较少的步骤做到这一点?
有没有必要做你的中间rebase,当然不需要交换到主分支这样做。我的工作流程实现相同的,是这样的:
一个问题建立一个新分支:git checkout -b issue remotes/trunk
(即remotes/trunk
可如果我已经在树枝上我感兴趣的可以省略)。
做一些工作,并提交它。
直接推送到Subversion存储库:git svn dcommit
。如果您编辑的文件已被更改,这只会失败。如果他们有,你会得到一个错误,所以做一个git svn rebase
然后再次尝试你的git svn dcommit
。
请注意,不需要先将它合并到主分支中。
结帐主分支:git checkout master
。
重设主分支:git svn rebase
。
(可选)删除问题分支;主分支和发行分支现在应该是相同的,因为git svn dcommit
之后立即执行git svn rebase
。
您可以从任何分支执行您的git svn
命令;系统将根据Subversion Subversion分支计算出承诺的地点或基准地点。如果你想查看它感兴趣的Subversion分支,请运行git svn dcommit --dry-run
特别是,master分支没有特别的特别之处。事实上,我经常忽略它并跳过上面的步骤4-5。我只是将一个问题分支交换到另一个问题分支,并且从不打扰将主分支带到Subversion提示。
你在这里有两件事情。为了保持您的历史记录在一条直线上,您需要重新绑定。但是,重新绑定意味着您必须在不同的代码库上重新应用更改。这可以引发一连串的冲突解决方案,您可能需要为每个承诺进行单次提交。
我可以添加的唯一帮助就是,如果您已经重新组装,则会知道您将会进行快速合并。在这种情况下,您不需要检出该分支以将其向前移动。因此,要更新的参考,您可以:
git push . my-branch:master
这将更新主人为指向我的分支指向如果它的快速转发才会工作。不幸的是,这不会帮助你,因为你需要在分支上做你需要的操作。
回到您的工作流程问题,与冲突问题相比,您会遇到更多问题。
在这个工作流程中,步骤3-4应该永远不会有合并问题,因为我的主人没有改变。对?所以可能会有6合并,但会有8合并。如果我刚刚合并,有冲突的可能性 - 我想我说的是最多应该有一个冲突 – hvgotcodes
你可以试试SubGit而不是git-svn。
SubGit是一个服务器端解决方案。它允许Git访问Subversion存储库以及Subversion访问Git存储库。一个人必须SubGit安装到Subversion版本库,即基本上添加必要的挂钩,做的每推转换和承诺:
$ subgit configure $SVN_REPOS
$ # Adjust $SVN_REPOS/conf/subgit.conf
$ # to specify your branches and tags
$ # Adjust $SVN_REPOS/conf/authors.txt
$ # to introduce svn author names to their git counterparts
$ subgit install $SVN_REPOS
之后,一个具有$ SVN_REPOS/git的一个Git仓库被连续以其颠覆同步对口。当为此Git存储库配置远程访问时(例如,通过git-http-backend),可以将任何Git工作流程和任何Git客户端与现有的Subversion存储库配合使用。
对于你的情况是这样的:
$ git checkout -b foo
$ git commit
$ git checkout master
$ git merge foo or git rebase foo
$ git push
更多的细节:
你是说如果我从主干克隆,创建一个本地分支,工作和提交,我可以从本地分支重新分配给主干?我仍然需要改变主人不是吗? – hvgotcodes
我认为你描述的场景是有人对远程Subversion主干提交了更改,并且你已经提交到本地“问题”分支,并且你想要进行远程更改。如果你有你的“问题”分支签出(即'git分支'列出旁边有一颗星星的“问题”分支),那么是的,'git svn rebase'会更新,让你的提交顶部的Subversion中继。根本不需要触摸“主”分支。 –
基本上是正确的。我唯一担心的是如果我一次处理多个问题,全部来自主人。我想我可以单独改变rebase,并且相信当我合并master时会更新 - 即。合并重新分配给master的分支会导致最新的master - 是否正确? – hvgotcodes