HG: 如何将某些(但不是全部)更改推送到“稳定”分支?

3

假设我在网站项目中进行新功能开发,要么在默认分支上进行,要么创建一个完全为该功能制作的新分支。当到达将该功能推送到实时网站的时间时,我想将其移动到live分支,然后通过hg archive将其存档到我的Apache目录中。

在整个过程中,我希望绝对确定不会推送其他未准备好发布到live分支的不相关更改。

  1. 这是个好主意吗?还是我应该做一些完全不同的事情?

  2. 如果代码在default中,我如何只推送需要的内容而不是所有内容到live?如果我只推送最新的变更集,它是否足够聪明以发送这些文件的最新版本,还是只会执行变更集?

  3. 如果代码在完全新的分支中,我是否需要将整个分支合并到live中?我如何将这些更改带回我的default分支,以便在那里也可以看到它们?

  4. 我正在阅读Mercurial Kick Start指南中的“任务管理”部分,它提到将default合并到您的分支中。我发现这非常令人困惑,想知道为什么要这样做。

感谢您能提供的任何帮助。

[编辑] 顺便说一下,我使用TortoiseHG [/编辑]

1个回答

3

HG现在有Phases功能。将一个变更集的阶段更改为secret,这样使用push时它就不会被推送。你可以使用TortoiseHG GUI来完成此操作。

除此之外,请注意仅仅推送或拉取某些内容并不会自动更改工作目录中的任何文件。它只是使一些额外的变更集可用。只有使用update才能实际更改您工作目录中的任何文件(除非您配置hg自动更新)。

在您提供的示例中,default分支中有一个错误修复。Bob也希望在他的分支中拥有此修复,因此他将default分支与自己的分支合并。这只是一个示例,以了解分支如何工作。您不必完全按照相同的方式使用它。如果您刚开始使用Mercurial,则最好仅使用一个分支,直到您有充分的理由使用更多分支。

例如:有3位开发人员在同一个项目上工作,他们都使用同一个分支(默认分支)。其中1位开发人员想要对代码进行重大的重构。他想要提交几个非常不稳定的变更集(许多“正在进行中”)。在默认分支中这样做可能会使其他开发人员感到不安。这是创建一个分支的好理由。在他的版本足够稳定之后,他将把他的分支合并到默认分支中。在他的分支中进行开发时,他希望与其他开发人员保持最新状态,因此他经常将默认分支合并到他的分支中。在单独的分支中停留太久可能会导致难以合并。幸运的是,在HG中合并非常快速,所以经常进行合并。

我不确定 Phases 在这种情况下是否适用。通过不推送将分支保留在一个仓库中对我们来说行不通,因为我们希望其他开发人员也拥有它,并且我们希望在测试和预发布服务器上使用它。我们只是不想在生产服务器上使用它。 - DOOManiac
嗯,那你能具体说明一下想要实现什么吗?如果你只是不想在你的生产服务器上使用它,那就不要推送到那里。 - Eiver
我想在我们的主代码库中保留“实时”代码的副本,这样它就不会只是在其他地方而没有链接。这样,我们可以随时切换到它,以查看确切的变更集。而且我们可以从开发服务器上执行此操作。此外,如果我们不将其保留在单独的分支中,那么仅推送错误修复或其他需要立即发布的内容是否很困难? - DOOManiac
在这种情况下,您可以遵循Mercurial开发人员在处理Mercurial时所使用的相同模式。拉取他们的代码以查看其外观。在默认分支上进行开发。同时拥有一个“稳定/实时”分支。在正常开发过程中,请勿提交到稳定分支。只提交到默认分支。如果默认分支准备好发布,则将其合并到稳定分支。如果需要在稳定分支上快速修复错误,则直接提交到稳定分支,并将稳定分支合并到默认分支,以便在默认分支中也可用该修复程序。我还发现标签很方便,通常会为特定的更改集(如1.0、1.1等)打标签(标记)。 - Eiver
在所有开发工作默认情况下进行,然后再推出的问题是,我们可能永远不会达到一切都准备好的时刻。我们总是有正在开发中的更改,不应该被推送。因此,为了解决这个问题,我们仍然需要一种方法来推出这些更改,而不会受到尚未准备好的内容的影响,无论是在“开发”分支还是“默认”或其他分支中... - DOOManiac
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接