2012-06-07 30 views
2

这是我的正常工作流程混帐SVN:混帐:更有效的方式来做到这一点

  1. 创建一个分支的一个问题
  2. 做分支一些工作
  3. 结账主
  4. 后提交
  5. SVN变基
  6. 结帐分支
  7. 底垫主
  8. 结帐主
  9. 合并分支
  10. dcommit

我在这里的目标是保持在一条直线上我的历史,同时也试图尽量减少合并的头痛。

有没有办法用较少的步骤做到这一点?

回答

1

有没有必要做你的中间rebase,当然不需要交换到主分支这样做。我的工作流程实现相同的,是这样的:

  1. 一个问题建立一个新分支:git checkout -b issue remotes/trunk(即remotes/trunk可如果我已经在树枝上我感兴趣的可以省略)。

  2. 做一些工作,并提交它。

  3. 直接推送到Subversion存储库:git svn dcommit。如果您编辑的文件已被更改,这只会失败。如果他们有,你会得到一个错误,所以做一个git svn rebase然后再次尝试你的git svn dcommit

    请注意,不需要先将它合并到主分支中。

  4. 结帐主分支:git checkout master

  5. 重设主分支:git svn rebase

    (可选)删除问题分支;主分支和发行分支现在应该是相同的,因为git svn dcommit之后立即执行git svn rebase

您可以从任何分支执行您的git svn命令;系统将根据Subversion Subversion分支计算出承诺的地点或基准地点。如果你想查看它感兴趣的Subversion分支,请运行git svn dcommit --dry-run

特别是,master分支没有特别的特别之处。事实上,我经常忽略它并跳过上面的步骤4-5。我只是将一个问题分支交换到另一个问题分支,并且从不打扰将主分支带到Subversion提示。

+0

你是说如果我从主干克隆,创建一个本地分支,工作和提交,我可以从本地分支重新分配给主干?我仍然需要改变主人不是吗? – hvgotcodes

+0

我认为你描述的场景是有人对远程Subversion主干提交了更改,并且你已经提交到本地“问题”分支,并且你想要进行远程更改。如果你有你的“问题”分支签出(即'git分支'列出旁边有一颗星星的“问题”分支),那么是的,'git svn rebase'会更新,让你的提交顶部的Subversion中继。根本不需要触摸“主”分支。 –

+0

基本上是正确的。我唯一担心的是如果我一次处理多个问题,全部来自主人。我想我可以单独改变rebase,并且相信当我合并master时会更新 - 即。合并重新分配给master的分支会导致最新的master - 是否正确? – hvgotcodes

1

你在这里有两件事情。为了保持您的历史记录在一条直线上,您需要重新绑定。但是,重新绑定意味着您必须在不同的代码库上重新应用更改。这可以引发一连串的冲突解决方案,您可能需要为每个承诺进行单次提交

我可以添加的唯一帮助就是,如果您已经重新组装,则会知道您将会进行快速合并。在这种情况下,您不需要检出该分支以将其向前移动。因此,要更新的参考,您可以:

git push . my-branch:master 

这将更新主人为指向我的分支指向如果它的快速转发才会工作。不幸的是,这不会帮助你,因为你需要在分支上做你需要的操作。

回到您的工作流程问题,与冲突问题相比,您会遇到更多问题。

+0

在这个工作流程中,步骤3-4应该永远不会有合并问题,因为我的主人没有改变。对?所以可能会有6合并,但会有8合并。如果我刚刚合并,有冲突的可能性 - 我想我说的是最多应该有一个冲突 – hvgotcodes

1

你可以试试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 

更多的细节:

  • SubGit是远比更加优越的合并跟踪方面混帐SVN,最终OF-线,MIME类型的支持等;
  • SubGit是一个带有一些免费选项的商业工具;
  • 我是SubGit开发人员之一。
相关问题