Mercurial 我们如何管理中央/共享存储库中的细粒度变更集?

Mercurial 我们如何管理中央/共享存储库中的细粒度变更集?,mercurial,workflow,dvcs,Mercurial,Workflow,Dvcs,我已经在本地使用Mercurial多年了,但现在我们正在我的公司做一个从Subversion转换过来的试点 我们接受这样一个事实,即开发人员现在将创建更细粒度的变更集——其中一些甚至可能无法构建。当开发人员将其更改推送到中央存储库时,所有这些更改集都将显示在历史记录中——这是自然的,也是意料之中的 我的问题是:我们如何处理这样一个事实:因为变更集更细粒度,这使得开发人员可以更新到不构建的修订版?我们来自这样一个世界:您可以在存储库中的任何位置签出,并合理地期望能够从该点发布。对于DVCS,您如何

我已经在本地使用Mercurial多年了,但现在我们正在我的公司做一个从Subversion转换过来的试点

我们接受这样一个事实,即开发人员现在将创建更细粒度的变更集——其中一些甚至可能无法构建。当开发人员将其更改推送到中央存储库时,所有这些更改集都将显示在历史记录中——这是自然的,也是意料之中的

我的问题是:我们如何处理这样一个事实:因为变更集更细粒度,这使得开发人员可以更新到不构建的修订版?我们来自这样一个世界:您可以在存储库中的任何位置签出,并合理地期望能够从该点发布。对于DVCS,您如何判断“安全”版本在哪里

这一问题在中有所论述,但我更感兴趣的是找到如何使用分支回购(而不是命名分支)来处理这一问题

我知道有一些方法可以修改历史记录(例如),从而使更改在存储库的历史记录中崩溃,但我们希望保留历史记录

查看和树,我看不到一个明确的方法来告诉安全修订的同步位置。这难道不像我们想象的那么重要吗?

您可以随时提交。这些可能是主要/次要版本、成功的构建或您喜欢的方式。你可以在他们的回购协议中看到和标签。

政治解决方案可能是“不要把垃圾推到主回购协议中”,不是吗

技术解决方案将是不标记,而是一个书签(“KnownAsGood”),应用于默认分支机构的最后一个工作负责人,并在开发人员之间达成协议“不更新提示,而是更新书签”


谁来测试提交和移动书签是“项目管理”标签中的另一个问题

您真的需要检查任何旧版本并期望它生成吗

我同意你的看法,你应该能够期待小费总是会增加。
通过某种形式的“不要将未完成的工作推给主要回购”政策/相互协议,这很容易实现

关于旧版本:

  • 如果您想再次构建较旧的官方软件版本(比如,您现在的版本是1.6,并且希望制作一个v1.2可执行文件),那么如果每个人都坚持“不要推未完成的工作”策略,那么您也可以构建
    1.2
    标签
  • 如果您想进行任何修订并构建它……那么,您真的需要这个吗?以前版本中的任何bug都可能涉及官方版本(参见上面的“
    1.2
    tag”内容),而不是介于两者之间的内容
  • 如果你真的需要一个在正式发布之间的可构建版本(无论出于何种原因),你必须查看提交消息,找到表明
    功能“foo”已完成的提交(而不是说
    已开始实现功能“foo”
    )。
    是的,这需要一些思考/常识,但我无法想象你会经常需要这些

如果您使用功能分支并合并它们而不进行快进合并,那么主线上仍然只有稳定的构建,但如果需要,可以在功能分支上看到不稳定的内容。

并且每个标记都会将修订添加到存储库中?我不确定我是否理解这个问题。您可以使用标记以某种方式(例如里程碑)将现有提交标记为特殊提交。如果您使用的是中央存储库,则标记将与其他提交一起推送。@bialix-是的,添加变更集,因为每个标记都会更改Mercurial项目本身的文件版本。hgtags上有一条准则“每次提交都应通过测试”。我们并没有完全做到这一点,但我们做得很好。