很多“Git vs. Hg”的解释将Mercurial的书签与常规的Git分支在功能上对齐。我试图理解Mercurial的书签与Git的区别,以及来自Evolve扩展的主题之间的区别。
我发现其中一个重要的区别是主题名称嵌入到每个提交中,而书签只是一个从一个提交移动到另一个提交的标记。但这意味着什么?还有其他区别吗?
我发现其中一个重要的区别是主题名称嵌入到每个提交中,而书签只是一个从一个提交移动到另一个提交的标记。但这意味着什么?还有其他区别吗?
但是这意味着什么?
书签是指向单个变更集的(可变)指针,主题是具有“大多数”分支特定内容的“传统”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
hg topics --list
或hg stack
)分支。 - Lazy Badger