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

Jas*_*n S 65 tags mercurial bookmarks

Mercurial中的标签书签之间有什么区别?我似乎无法找到关于两者如何不同的讨论.

giz*_*zmo 33

让我们将您的存储库视为" 选择您自己的冒险书籍 ",具有不同的观点.

  • 一个标签是像作为邮票的编辑把你的稿子说"OK,我们保持跟踪你目前的工作,万一还是发生了."
  • 一个名为分支将是一个章节.你必须在一个点上选择你必须写的章节,他们就在那里.有些人会合并,有些人会结束(抱歉,你死了.)
  • 一个书签,没错,是一个书签.当你阅读(提交)这本书时,它会跟着你.它可以帮助您跟踪"当时正在阅读的内容",这样您就可以删除它们,将它们移动到不同的"章节".当您共享图书(推送)时,除非您明确愿意,否则通常不会共享书签.所以你通常在匿名分支上使用它们,因为它们的生命周期比命名分支短.

  • 我没有这个类比.我是在写这本书还是读一本别人正在写的书?出版商版本是否控制着手稿?他是在盖章还是他的?我在写稿子,复印吗?使用tippex处理它们?在计算机上进行并以某种方式对其进行版本控制? (35认同)
  • 这个比喻*非常混乱,可以使用精炼.试试这个.你在看书.1页= 1变更集.*A**标签**在您感兴趣的页面上贴上便条.它保留在同一页面上,可用于轻松查找该页面.*A**命名分支**是一章.每个页面都有一个写在边距的章节号.这将相关页面组合在一起.*A**书签**是书签.当您从一个页面移动到另一个页面时,您可以随身携带书签.您可以使用多个书签来跟踪本书不同部分的进度. (18认同)
  • 意想不到的类比**O_O** (9认同)
  • 我发现这个比喻比文字解释更令人困惑(标签:特定变更集的标签;是repo永久历史中变更集的一部分.书签:指向分支尖端的指针;与变更集分开存储,有时比较类似于git中的"轻量级"分支). (9认同)
  • 如果您已经有一两个想法,那么这个答案很棒.我认为它做得很好.:) (3认同)

Joh*_*den 24

实际上有五个概念可供使用:

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

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

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

命名分支和标记是仅限于mercurial的概念,其中分支名称和标记实际上通过对存储库进行更多提交而实际记录在存储库中.它们倾向于以不一定明显的方式传播到其他存储库.

本地标签和书签更像是git调用标签和分支.它们是元数据而不是与版本化对象混合在一起.因此,它们不会被表示为存储库历史记录的一部分.它们往往是您的存储库的本地存储,除非您故意传播它们,否则它们不会传播.

至少我认为这是他们的工作方式.在每天使用mercurial大约十二个月之后,我还没有真正掌握它的模型.如果有人比我更清楚,那么随意编辑这个答案,这是正确的.


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

我正在与另外20个人一起创建一个共享存储库.我在自己的私有存储库中进行了许多实验和轻量级分支,它们永远不会被推送到我们的主要中央存储库.有时候,一旦实验结束,我将修改主线并将变更集推送到中央存储库,从中可以找到其他人的机器.

如果他们是那些对mercurial如何运作有吸引力的人之一,我偶尔会将一些变更集推送给同事.但有几个人有点害怕它,如果我发送他们可以应用补丁的差异,我更喜欢.

对于实验我希望是短暂的和私人的,我只是让轻量级分支发生在他们可能的地方,并记住正在发生的事情.如果我感觉自己的记忆在一条已经存在的树枝上滑落,我会给它添加书签.

我使用本地标签来标记我可能想要回到某一天的修订版.他们使有趣的过去状态更容易找到.

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

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

如果我们中的三个或四个人想要在一个实验上合作,这可能值得一个命名分支,我们可能在我们自己之间共享但不会推送到中央回购.我不知道这会有多好用!


Mat*_*hen 23

当您需要助记符(foo_feature)指向随工作进度而更改的提交ID时,将使用书签.它们比普通的Mercurial分支更轻,有点类似于git分支的工作方式.

标签通常指向固定的提交ID.它们可以手动重新分配,但不鼓励这样做.


Ry4*_*ase 12

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

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
Run Code Online (Sandbox Code Playgroud)

此时mytag仍指向修订版0,mybookmark现在指向修订版2.此外,标记创建了一个变更集,而书签则没有.

当然,书签也创建了一个修改