checkins应该是小步骤还是完整功能?

def*_*ode 25 git mercurial dvcs bazaar

版本控制的两种用途似乎决定了不同的签到样式.

  • 以分布为中心:变更集通常会反映完整的功能.一般来说,这些签到会更大.这种风格更加友好用户/维护者.

  • rollback centric:changesets将是单独的小步骤,因此历史记录可以像一个非常强大的撤销功能.通常,这些签到会更小.这种风格更适合开发人员.

我喜欢使用我的版本控制作为非常强大的撤销功能,同时我会抨击一些顽固的代码/错误.通过这种方式,我不会为了尝试可能的解决方案而做出重大改变.然而,这似乎给了我一个碎片化的文件历史记录,其中包含许多"井下不起作用"的签名.

如果我尝试让我的变更集反映完整的功能,我会放弃使用我的版本控制软件进行实验.但是,用户/维护者更容易弄清楚代码是如何发展的.这对于代码审查,管理多个分支等具有很大的优势.

那么开发人员应该做些什么呢?检查小步骤或完整功能?

Joh*_*lla 20

那么开发人员应该做些什么呢?签入小步骤或完整功能?

它可以充分利用这两个世界,尤其是与git其他DVCS一起使用,让您可以选择发布哪个历史记录.这是一个简单的工作流程,用于说明这一点.

  • 您的项目有分支和发布分支.开发人员各自维护他们自己的开发分支,他们不推动.

  • 您使用develop来完成日常工作.这里出现了一口大小的提交,代表了项目状态随时间的增长.您可以使用topic-*分支来处理超过几天或主要重构的更长时间的功能.你承诺经常发展,也许每小时几次.这就像在您正在编辑的文档中点击"保存".

  • 当您有一些适合下一版本的提交时,您将合并相关提交以进行发布.release现在有一堆个别提交,有选择地从你的开发分支中获取.只要你达到一个好的停止点,你就会承诺释放.这通常是一天几次.

  • 当释放已经准备就绪,你的领导开发者南瓜所有提交自上次合并,以掌握到一个单一的合并提交出现在.然后使用发布标识符(例如,v.1.0.4)标记此提交.这种情况很少发生,可能是一次迭代或每隔几周发生一次.

在这里,你可以吃蛋糕,也可以吃.在发布之前,您可以回滚不应发生的更改或您不想进入发布的更改,并且您可以一次执行一项更改.开发人员友好!但是用户也可以获得他们想要的东西:big,globby在master上提交,代表自上次发布以来发生的变化.


Jör*_*tag 19

DVCS系统的优点在于您可以同时拥有这两者,因为在DVCS中,与CVCS不同,发布提交正交.在CVCS中,每个提交都会自动发布,但在DVCS中,提交只会在推送时发布.

因此,提交小步骤,但只发布工作功能.

如果您担心污染您的历史记录,那么您可以重写它.您可能听说重写历史是邪恶的,但事实并非如此:只重写已发布的历史记录是邪恶的,但同样,由于发布和提交不同,您可以在发布之前重写未发布的历史记录.

例如,这就是Linux开发的工作原理.Linus Torvalds非常关注保持历史清洁.在一篇关于Git的早期电子邮件中,他说发布的历史应该看起来不像你实际开发的那样,但如果你是无所不知的,你如何开发它可以看到未来并且从未犯过任何错误.

现在,Linux有点特别:它承诺以每11分钟1次提交的速度,每天24小时,每周7天,每年365天,包括夜晚,周末,假期和自然灾害.而且这个比率仍然在增加.想象一下,如果每一个拼写错误和脑力计都会导致提交,那么会有多少提交.

但是开发人员自己在他们的私有存储库中通常会提交他们想要的东西.

  • 在您使用内核示例之前,我从来没有真正欣赏过重写您的提交历史记录。 (2认同)

小智 6

小步骤.有一个原因,它被称为修订控制,而不是释放控制 :)

尽可能经常地提交.别忍住了.在"进行中"分支上提交代码永远不应该有负面影响.期望承诺不"破坏构建"的开发商店滥用RCS.同样,将任何含义归于提交都是危险的策略,仅仅因为它与修订控制的目的相冲突.意思应该归结为标签,分支,克隆,存储或RCS调用它们的任何内容.这些东西具有旨在传达目的的元数据(可能是最小的名称).修订只是您修改的历史记录.

您要做的最后一件事是制定一项策略,以阻止开发人员出于任何原因提交代码.