这个分散的工作流程是否可以在Git中实现?

时间:2010-05-12 01:51:45

标签: git workflow

这就是我希望我的工作流程在概念层面看起来像:

  1. 我暂时修改了我的新功能
  2. 我发现评论中有拼写错误
    • 我改变了
    • 由于拼写错误与其他任何事情完全无关,我将这一变化置于一堆评论修正案中
  3. 我一直致力于代码
  4. 我意识到我需要充实一些实用功能
    • 我这样做
    • 我把这个改变放在自己的堆里
  5. 步骤2,3和4每天重复
  6. 我完成了新功能并将该功能的更改放在一堆
  7. 我在上游推送了不错的补丁:一个是新功能,一个用于其他调整,一个有一堆注释修复,如果已经累积了
  8. 由于我既懒惰又是完美主义者,我希望能够做一些不按顺序的事情:我可能会纠正一个错字,但忘了把它放在评论修复堆中;当我准备上游补丁(我正在使用git-svn,所以我需要非常慎重)时,我会在那时撤回注释修复。我可能会忘记将事情完全分开,直到最后。但是我可能/也已经/已经犯下了一些堆(抱歉,这个比喻正在崩溃......)。

    这就像使用带有SVN的Eclipse变更集一样,只有我可以对不同堆中的同一文件进行不同的更改(不得不将变更分解为不同的提交,这是促使我转移到git-svn,实际上... ),和Git一起,我可以拥有完整的混乱变化历史,实验分支和所有,但仍然可以做出一个漂亮,整洁的补丁。

    我最近刚开始和Git一起玩了很长一段时间后,到目前为止我很开心。然而,上述工作流程没有真正映射到Git的最大方式是“bin”实际上不能只是一个本地分支,因为工作树只能反映单个分支的状态。或者Git索引可能是“堆积”,我想要的是以某种方式(有效地)不止一个。

    我可以想出几种方法来近似我想要的东西(可能是创造性地使用藏匿?错综复杂的藏匿 - 合并舞蹈?),但我对Git的掌握不够坚实,无法确定如何最好地放置所有的碎片在一起。据说Git比VCS更像是一个工具包,所以我想这个问题归结为:我如何用这些工具构建这个东西?

1 个答案:

答案 0 :(得分:5)

听起来你想要做的就是每次单独做一些事情时创建大量的提交,然后使用git rebase -i重新排序和组合你的提交,然后再将它们推到上游。

rebase功能是Git真正强大的功能之一,它似乎非常适合您的操作模式。

由于您可以使用rebase更改提交消息,因此您可以为每个相关提交添加“标记”,例如“COMMENT”或“UTILS”,这样您以后可以在使用{随机播放内容时轻松识别它们{1}}。

git rebase -i的一个限制可能很尴尬 - 你只能向补丁发送补丁的“完整”集(从Git的角度来看)。也就是说,git svn dcommit仅从您开始进行更改的点提交到HEAD。如果你想要保留以后批量提交的提交(比如你的拼写错误),那么你可以使用dcommit为它们创建一个临时分支来保持最新状态。

我在“我要做的事情列表”中尝试为git rebase制作补丁,让您选择要发送到Subversion的补丁。