Mercurial书签和Evolve主题有什么区别?

3
很多“Git vs. Hg”的解释将Mercurial的书签与常规的Git分支在功能上对齐。我试图理解Mercurial的书签与Git的区别,以及来自Evolve扩展的主题之间的区别。
我发现其中一个重要的区别是主题名称嵌入到每个提交中,而书签只是一个从一个提交移动到另一个提交的标记。但这意味着什么?还有其他区别吗?
1个回答

3

但是这意味着什么?

书签是指向单个变更集的(可变)指针,主题是具有“大多数”分支特定内容的“传统”hg分支。

其他区别是什么?

主题分支是轻量级分支,当更改被完成(移动到公共阶段)时,它们会消失。书签必须手动删除。

书签可以在存储库之间轻松推送和拉取。主题交换(如“主题”)需要一些额外的操作才能通过“非发布服务器”进行工作。

主题教程的示例(缩短版)

推送前带有主题的存储库

>hg log --graph --rev "topic('food')"
@  changeset:   2:86d4fa8dfae9
|  tag:         tip
|  topic:       food
|  user:        lazybadger
|  date:        Wed Oct 12 15:49:32 2022 +0500
|  summary:     Adding fruits
|
o  changeset:   1:c7451c53346d
|  topic:       food
|  user:        lazybadger
|  date:        Wed Oct 12 15:47:26 2022 +0500
|  summary:     Adding condiments
|
o  changeset:   0:e4aaf76d4cb3
   topic:       food
   user:        lazybadger
   date:        Wed Oct 12 15:44:28 2022 +0500
   summary:     Shopping list

因为食物是在默认值的基础上创建的

>hg stack
### topic: food
### target: default (branch)
s3@ Adding fruits (current)
s2: Adding condiments
s1: Shopping list

在将代码推送到发布服务器后,我得到了相同的变更集,但只在目标分支上。

>hg log --graph
@  changeset:   2:86d4fa8dfae9
|  tag:         tip
|  user:        lazybadger
|  date:        Wed Oct 12 15:49:32 2022 +0500
|  summary:     Adding fruits
|
o  changeset:   1:c7451c53346d
|  user:        lazybadger
|  date:        Wed Oct 12 15:47:26 2022 +0500
|  summary:     Adding condiments
|
o  changeset:   0:e4aaf76d4cb3
   user:        lazybadger
   date:        Wed Oct 12 15:44:28 2022 +0500
   summary:     Shopping list

所以,主题名称会与属于它的每个提交相关联?但是,一旦提交变为公开状态,这些信息就会被删除,对吗? - arrowd
1
@arrowd - 是的,主题的变更集将返回到主题“target”(请参见hg topics --listhg stack)分支。 - Lazy Badger
@arrowd - 不,从技术上讲,主题名称是保持不变的更改集的元数据。但是,如果更改集变为公共状态,则“hg log”不会显示这些更改集的主题名称。 - fhgd

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