假设我已经将一个 repo 克隆到一个名为 ~/trunk 的目录中,并且我想将一个名为 my-new-branch 的分支共享到目录 ~/my-new-branch 中。我将如何使用 hg 共享扩展来做到这一点?
这就是我一直在做的事情:
光盘~
hg share trunk my-new-branch
但是当我 cd 进入新目录时,我必须去分支?
使困惑。
假设我已经将一个 repo 克隆到一个名为 ~/trunk 的目录中,并且我想将一个名为 my-new-branch 的分支共享到目录 ~/my-new-branch 中。我将如何使用 hg 共享扩展来做到这一点?
这就是我一直在做的事情:
光盘~
hg share trunk my-new-branch
但是当我 cd 进入新目录时,我必须去分支?
使困惑。
IMOshare
是一个非常有用的命令,在某些情况下它具有一些很大的优势clone
。但我认为不幸的是,它在许多情况下被忽视了。
share
所做的是在多个本地存储库之间重复使用 Mercurial 版本控制信息的“存储”。(它与分支没有直接关系。)
“存储”是一堆文件,代表 Mercurial 为您保存的所有历史记录。你不直接与它交互。它在 99.99% 的时间里都是黑匣子。
share
与更常用的clone
命令不同,它clone
会复制信息存储,运行时间更长,并且可能使用更多的磁盘空间。
share
使用而不是的“副作用”clone
是您将立即在每个 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
本地(在同一台 PC 上)。
一个警告——我会避免在网络连接上使用共享——比如映射网络驱动器上的回购。我认为这可能会遇到一些性能甚至可靠性问题。事实上,在任何情况下,我都不会使用 Mercurial 存储库(如果可以避免的话)来处理网络驱动器。在本地克隆会更安全。
其次——我会阅读文档,你可能会遇到一些奇怪的场景;但我认为这些不可能仅仅基于我自己的经验。
最后一点:虽然 share 是作为 Mercurial 的“扩展”而实现的,但它一直有效地成为它的一部分。所以没有什么新的或实验性的,不要让“延期”交易让你失望。