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

时间:2019-01-30 05:27:20

标签: mercurial mercurial-extension

说我已将一个仓库克隆到一个名为〜/ trunk的目录中,我想将一个名为my-new-branch的分支共享到该目录〜/ my-new-branch中。我将如何使用hg股票扩展名呢?

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

cd〜

hg共享中继my-new-branch

但是当我进入新目录时,我必须拥抱到分支吗?

困惑。

1 个答案:

答案 0 :(得分:1)

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

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

“商店”是一堆文件,代表Mercurial为您保存的所有历史记录。您不会直接与其互动。 99.99%的时间是黑匣子。

share与更常用的clone命令的不同之处在于clone将复制信息存储,从而花费更长的运行时间并可能使用更多的磁盘空间。

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


如果您想同时在项目的多个分支(命名或未命名)中工作, cloneshare都可以正常工作。您已经创建了第二个存储库,是的,您需要将其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在本地(在同一台PC上)了。


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

其次-I would read the docs,您可能会遇到一些奇怪的情况;但我认为这些不可能仅基于我自己的经验。


最后说明:尽管份额被作为对Mercurial的“扩展”来实现,但自从永久以来,它就一直是份额的一部分。因此,它没有新的东西或试验性的东西,不要让“扩展”交易让您失望。