hg标签和hg书签有什么区别?

Mercurial中的标签和书签有什么区别? 我似乎无法find任何有关这两者如何不同的讨论。

让我们把你的资源库视为一个“ select你自己的冒险书 ”,用不同的观点。

  • 一个标签就像编辑器在你的稿子上写着“好的,我们留下你当前工作的痕迹 ,以防万一”。
  • 一个命名的分支将是一个章节。 你必须在某一时刻select哪一章你必须写,而且他们在那里留下来。 有些会合并回来,有些会结束(对不起,你死了)
  • 书签就是书签。 当你阅读(提交)这本书时,它会跟着你。 它可以帮助你保持“当时你正在阅读的内容”的轨迹,所以你可以删除它们,把它们移到不同的“章节”。 当你分享这本书的时候,通常不会共享你的书签,除非你明确地要。 所以你通常在匿名分支上使用它们,因为它们的生命周期比命名分支短。

当你想要助记符(foo_feature)指向一个改变的提交ID作为你的工作进展时使用书签。 它们比普通的Mercurial分支更轻量化,有点类似于git分支的工作方式。

标签通常指向固定的提交ID。 他们可以手动重新分配,但这是不鼓励的。

实际上有五个概念可以玩:

  • 标签
  • 本地标签
  • 书签
  • 轻量级分支
  • 命名分支

轻量级分支是如果你只是使用mercurial会发生什么。 您的存储库历史logging会分叉,有时会在您更改内容并移动历史logging时进行合并。

其他四种是注解轻量级分支的方法以及构成它们的变更集。

命名分支和标签是mercurial-only概念,其中分支名称和标签实际上通过向存储库提交更多的信息而被logging在存储库中。 他们倾向于以不一定明显的方式传播到其他存储库。

本地标签和书签更像git调用标签和分支。 它们是元数据,而不是与版本化的对象混合在一起。 所以他们没有被描述成仓库历史的一部分。 他们往往是你的仓库本地化,不会传播,除非你故意传播他们。

至less我觉得他们都是这样工作的。 在每天使用mercurial大约十二个月后,我还没有真正掌握它的模型。 如果有人比我更了解,那么请随时编辑这个答案,这是正确的。


我在实际中如何使用这些东西。

我正在与大约20个其他人共享一个共享的存储库。 我在自己的私有存储库中做了很多实验和轻量级的分支,这些分支永远不会被推送到我们的主中央仓库。 偶尔,一旦一个实验已经完成,我将修改主线,并将更改集推送到中央存储库,从中find其他人的机器。

如果他们是那些对mercurial运作起来很舒服的人,我偶尔会把一些变更集合给同事。 但是有几个人有点害怕,而且更喜欢我发送他们可以使用补丁的差异。

为了实验,我希望是短暂的和私人的,我只是让轻量级分支发生在他们可能的地方,并记住发生了什么事情。 如果我觉得自己的记忆力正在滑落一段时间,我就把它collections起来。

我使用本地标签来标记我可能会回来的修订版本。 他们使有趣的过去状态更容易find。

我自己几乎从来不会制作非本地标签或命名分支(除非是偶然的,如果我这样做,我会将其销毁)。 但是我们的发布人呢。 我们发布的主要版本都有自己的命名分支从主线,小版本在这些分支上有标签。 这确保了这些重要的分支和标签对每个人都是一样的。

我再也不知道这是不是应该如何使用mercurial,但它似乎是一个适合我们团队规模的模型。

如果我们三四个人想要在一个实验上进行合作,那么这可能是一个有名的分支,我们可能会分享自己的分支,但不会推到中央仓库。 我不知道会有多好!

最大的区别是书签在提交时会自动向前移动。 这是一个例子:

hg init ..edit a file.. hg commit -m 'my commit' # creates revision 0 hg tag -r 0 mytag # creates revision 1 hg bookmark -r 0 mybookmark # doesn't create a revision hg update 0 # get back to r0 ..edit a file.. hg commit -m 'another commit' # creates revision 2 

在这一点上,mytag仍然指向修订版本0,而mybookmark现在指向修订版本2.此外,标记创build了一个变更集,书签没有。

当然,书签也创build了一个revisio