1

我真的很喜欢 Mercurial 存储库的 Hg Flow。我们目前正在使用 Bitbucket,并且在每个产品中都有多个开发人员在工作。基本上它们可以如下工作:

  • 一个团队可能只开发一个功能。
  • 另一个团队可能会致力于发布/热修复。

我是否将“开发”分支保留在 BitBucket 或本地存储库中。以及功能分支怎么样,我应该将它们推送到中央存储库并在需要时删除。我想我们应该这样做对吗?

谢谢

4

1 回答 1

2

我个人既不使用git flow也不hg flow作为工具,但我确实将一些方法用于我自己的项目(手动)。

在详细介绍之前,当多人需要合并或从它们分支时,您总是需要在 main/bitbucket 存储库中提供分支。这肯定包括“开发”,并且可能还包括多个人需要处理的功能/修复(除非您有另一个存储库或方法来在他们之间交换分支/提交)

使用 git 和 mercurial/hg 之间的区别在这里是相关的,因为分支模型完全不同。有关详细信息,请参阅Mercurial 中的分支指南。使用 hg 书签与 git 对分支所做的非常相似,但在 BitBucket 上不完全支持书签分支模型(请参阅此票证)。

hg flow(该工具)使用命名分支。与 git 分支相比,它们根本不是轻量级的,而是永久的和全局的(它们至少现在可以关闭)。这意味着每当在“默认”以外的任何(命名)分支上创建的任何提交被推送到 bitbucket(即使在合并之后),这都会在 bitbucket 存储库中创建分支。

因此,除了将所有分支保留在主存储库中之外,您别无选择。但是,您可以决定何时推送以及何时关闭它们。我建议hg push -r只推送您想要推送的分支/头,并且仅在其他人需要它们或完成并合并时推送它们。不再需要分支机构时应立即关闭它们。(这可能是hg flow自动完成的)您应该尽可能在本地关闭分支。这样,它们甚至可能不会出现在 bitbucket 界面中。有些可能仅在关闭状态下才能到达 bitbucket 存储库(这会将它们从界面中隐藏)。

显然,您应该经常推送多人需要合并的任何分支。在我对工作流程的理解中,“开发”分支始终是每个项目应该经常推送的一个分支(在本地测试之后)。


如果您不使用hg-flow或未命名分支,情况会有所不同。两者,使用分叉/克隆或书签作为分支方法都不会生成永久或必然的全局分支。

如上所述,当您还想使用 bitbucket 拉取请求时,不能(可靠地)使用书签。您必须单独推送书签。正常的推送只会更新(一个负责人)分支,因此您可能会在稍后进行marging时错过其他团队成员的提交。Hg 会告诉你何时创建了一个新的头部。在这种情况下,您可能希望在推送之前将带有远程书签的分支合并到您的分支中。

当使用 forks 作为分支时,它的工作方式有点像书签,但 bitbucket 完全支持它。您需要为每个分支在 bitbucket 上创建一个新的分支。如果您需要不同的人来处理它并且您没有其他提交交换的方式,您自然只想创建额外的分叉。然后,您至少需要一个单独的“开发”存储库。


我个人不会在 bitbucket 上使用带有 hg 的完整“流”。对于我的项目,“开发”分支与主/默认分支相同,因为我不使用 git 发布版本(除了开发版本,无论如何都不会使用发布分支)。我不需要单独的“生产”分支,因为标签主要用于生产用途。我也没有创建单独的“发布准备”分支。只有一个时间点我只在开发和停止合并功能上应用错误修复。当您需要同时处理依赖于下一个版本中不会发布的功能的功能时,这显然不起作用。

始终使用完整的“git 流”很容易,因为 git 分支既简单又轻量。根据您使用的分支模型以及其他工具的支持程度,使用完整的“hg 流”可能并不“值得”。

hg 指南实际上不鼓励将命名分支用于短期分支。请参阅通过命名分支进行功能分离。指南中提倡的“简单”分支概念是分叉/克隆。git flow如果工具/bitbucket 支持更好(并且书签更长是核心 hg 功能),书签将是翻译的自然方式。


免责声明: 当我可以选择时,我更喜欢 git。我确实使用 hg,但不是我个人的选择。

您也可能已经考虑了大部分内容,但由于您没有说明任何这些细节并接受与您所要求的完全不同的答案(在评论中),所以我想详细说明一下。


编辑:

跟进评论:

我认为 hg 书签可与 git 分支相媲美,因为两者都只是提交的可移动指针。主要区别在于,当您在 git 中删除一个分支时,提交可能会丢失(当它们不是其他分支的一部分或在它们被垃圾收集之前指向另一个分支时)。当您删除 hg 中的书签时,除非手动剥离,否则提交仍然是存储库的一部分((命名或默认)分支的一部分)。

匿名头像是相关的,但仅作为书签指向的东西。如果没有指向它们的书签,匿名头就不能用作一个分支来使用(不仅仅是本地合并)和共享。当您在存储库中有匿名头像时,您不知道他们应该是什么或他们来自哪里,除非您记得或有其他线索。在我看来,匿名头像只是书签后期实现的一种解决方法,而遥控器/远程头没有很好的实现。

命名分支是相当不相关的,因为它们与 git 分支的唯一共同点是有一个名称。与克隆整个存储库(分叉为分支模型)相比,它们是轻量级的,但就“你无法摆脱它们”而言,它们是轻量级的。它们是永久性的。大多数地方都告诉你不要使用命名分支,除非你有很好的理由或者它是一个长期运行的分支。

于 2013-10-13T10:42:54.267 回答