如何正确使用hg共享扩展?

问题描述 投票:0回答:1

假设我已将一个存储库克隆到名为

~/trunk
的目录,并且我想将名为 my-new-branch 的分支共享到目录
~/my-new-branch
。我该如何使用
hg share
扩展来做到这一点?

这就是我一直在做的事情:

cd ~
hg share trunk my-new-branch

但是当我

cd
进入新目录时,我必须hg到分支?

困惑。

mercurial mercurial-extension
1个回答
2
投票

IMO

share
是一个非常有用的命令,在某些情况下比
clone
有一些很大的优势。但我认为不幸的是,它在很多情况下都被忽视了。

share
的作用是在多个本地存储库之间重用Mercurial版本控制信息的“存储”。 (它与分支没有直接关系。)

“存储”是一堆文件,代表 Mercurial 为您保存的所有历史记录。您不直接与它交互。 99.99% 的情况下它都是黑匣子。

share
与更常用的
clone
命令不同,因为
clone
会复制信息存储,运行时间更长,并且可能使用更多磁盘空间。

使用

share
而不是
clone
的“副作用”是,您将立即在 every
shared
存储库中看到所有相同的提交。就好像推/拉在所有
shared
存储库中自动发生。对于
clone
来说,情况并非如此,您必须首先明确地推/拉。这非常有用,但在您的工作流程中需要注意,因为如果您只是习惯的话,第一次使用它时可能会感到惊讶
clone


如果您想同时在项目的多个分支(命名或未命名)中工作,

clone
share
都可以正常工作。您已经创建了第二个存储库,是的,您需要将其
update
到您想要开始处理的任何变更集。

使用

share
的具体示例:

hg clone path\to\source\repo working1   # Create local repo working1 cloned from somewhere
cd working1
hg up branchname1  

cd ..

hg share working1 working2  # shares the 'store' already used for working1 with working2
cd working2
hg up branchname2  # some other branch or point to start working from

一旦您在

working1
中提交了某些内容,该提交就会在
working2
的历史记录中可见。但由于它们不在同一个分支上,这对
working2
没有真正的直接影响。

working2
将保留
path\to\source\repo
作为其默认推/拉位置,就像
working1
一样。


我自己的做法是创建大量本地

shared
存储库(快速、简单、节省空间)并在各个分支机构工作。通常,我什至会将其中一些放在同一个命名分支上,但由于各种原因设置为历史上的不同点。我发现不再需要在本地实际
clone
(在同一台电脑上)。


一个警告 - 我会避免通过网络连接使用共享 - 就像映射网络驱动器上的存储库一样。我认为这可能会遇到一些性能甚至可靠性问题。事实上,在任何情况下我都不会使用 Mercurial 存储库(如果可以避免的话)关闭网络驱动器。本地克隆会更安全。

其次——我会阅读文档,你可能会遇到一些奇怪的场景;但我认为这些不太可能只是基于我自己的经验。


最后一点:虽然共享是作为 Mercurial 的“扩展”实现的,但它实际上一直是 Mercurial 的一部分。所以它没有什么新的或实验性的,不要让“延期”交易让你失望。

© www.soinside.com 2019 - 2024. All rights reserved.