代码之家  ›  专栏  ›  技术社区  ›  Luke Maurer

这种分散思维的工作流程在Git中是可以实现的吗?

  •  4
  • Luke Maurer  · 技术社区  · 15 年前

    这就是我希望我的工作流在概念级别上看起来的样子:

    1. 我对我的新功能进行了一段时间的黑客攻击
    2. 我注意到评论中有错别字
      • 我改变它
      • 由于打字错误与其他事情完全无关,所以我把这些更改放在一堆注释修正中。
    3. 我一直在写代码
    4. 我意识到我需要充实一些实用功能
      • 我这样做
      • 我把零钱放在自己的一堆里
    5. 步骤2、3和4每天重复
    6. 我完成了新功能,并将对该功能所做的更改放在一堆中
    7. 我把很好的补丁推到上游:一个带有新特性,一些用于其他的调整,一个带有大量注释修正(如果积累了足够多的话)。

    因为我既懒惰又完美主义,所以我想做一些不正常的事情:我可能更正了一个打字错误,但忘了把它放在注释修复堆中;当我准备上游补丁(我使用的是Git SVN,所以我需要仔细考虑这些)时,我会在那一点上拉出注释修复。我可能会忘记把事情完全分开,直到最后。但我可能/也可能/已经在路上犯下了一些错误(对不起,这个比喻正在分解)。

    这一切都很像使用Eclipse变更集和SVN,只有我可以在不同的堆中对同一个文件进行不同的更改(必须将更改分解为不同的提交是促使我转到Git SVN的原因,事实上是),而使用Git,我可以获得完整的未组合的更改历史、实验分支和所有,但仍然我做了一个漂亮整洁的补丁。

    我最近刚开始和吉特打了一段时间的交道,现在我很高兴。但是,上面的工作流没有真正映射到Git的最大方式是,一个__bin_不能真正只是一个本地分支,因为工作树只反映了一个分支的状态。或者,Git指数是一个__桩,_我想要的是以某种方式(有效地)拥有多个。

    我可以想出一些方法来近似我想要的东西(也许是创造性地使用stash?复杂的隐藏结账合并舞蹈?)但我对Git的把握不够牢固,无法确定如何最好地将所有的部件组合在一起。据说Git比风投更像是一个工具包,所以我想问题归结为:我该如何用这些工具构建这个东西?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Greg Hewgill    15 年前

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

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

    因为您可以更改提交消息 重碱 ,您可以在每个相关提交中添加一个“标签”,如“comment”或“utils”,这样您可以在以后使用 Git ReBase-Ⅰ .

    限制之一 git svn dcommit 可能会很尴尬-你只能发送一套“完整”的补丁(从Git的角度来看)来进行颠覆。也就是说, dcommit 只从您开始进行更改的点向头部提交。如果您有一些提交(比如您的打字错误),您希望在以后的批提交中保留这些提交,那么您可以为这些提交创建一个临时分支,使用 git rebase 保持最新。

    我的“某个时候要做的事情列表”上有一个补丁 GIT SvN Debug 这允许您选择要发送到Subversion的补丁。