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

Mercurial 如何正确使用hg共享扩展?,mercurial,mercurial-extension,Mercurial,Mercurial Extension,假设我已将一个repo克隆到一个名为~/trunk的目录,并希望将一个名为my new branch的分支共享到该目录~/my new branch。我将如何通过hg共享扩展来实现这一点 这就是我一直在做的: 光盘~ hg共享我的新分支 但是,当我将cd放入新目录时,我必须跳转到分支机构 困惑。IMOshare是一个非常有用的命令,在某些情况下,它比clone有很多优点。但我认为,不幸的是,它在许多情况下被忽视了 是在多个本地存储库之间重复使用Mercurial版本控制信息的“存储”。(它与分支

假设我已将一个repo克隆到一个名为~/trunk的目录,并希望将一个名为my new branch的分支共享到该目录~/my new branch。我将如何通过hg共享扩展来实现这一点

这就是我一直在做的:

光盘~

hg共享我的新分支

但是,当我将cd放入新目录时,我必须跳转到分支机构

困惑。

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

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

“存储”是一组文件,代表Mercurial为您保存的所有历史记录。你不会直接和它互动。99.99%的时间都是黑匣子

share
不同于更常用的
clone
命令,因为
clone
将复制信息存储,运行时间更长,并可能占用更多的磁盘空间

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


如果要同时在项目的多个分支(命名或未命名)中工作,
克隆
共享
都可以正常工作。如果您已经创建了第二个存储库,那么您需要
将其更新为您想要开始处理的任何变更集

使用
共享的具体示例

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
的历史记录中可见。但由于它们不在同一分支上,这对
工作2
没有实际的直接影响

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


我自己的实践是创建许多本地
共享
存储库(快速、简单、节省空间),并在各个分支中工作。通常,我甚至会在同一个命名的分支上有几个分支,但由于各种原因,它们被设置为历史上的不同点。我不再需要在本地(在同一台PC上)进行
克隆


一个警告——我会避免在网络连接上使用共享——就像在映射的网络驱动器上进行回购一样。我认为这可能会带来一些性能甚至可靠性问题。事实上,在任何情况下,我都不会在网络驱动器上进行反复无常的回购(如果可以避免的话)。在本地克隆会更安全

其次,你可能会遇到一些奇怪的情况;但我认为这些不可能仅仅基于我自己的经验



最后一点注意:虽然share是作为Mercurial的“扩展”实现的,但它从永远以来都是Mercurial的一部分。因此,它没有什么新的或实验性的,不要让“延期”交易让你拖延。

@jestro很高兴它有帮助