如何正确使用 hg share 扩展?
How to properly use hg share extension?
假设我已经将一个 repo 克隆到一个名为 ~/trunk 的目录,并且我想将一个名为 my-new-branch 的分支共享到目录 ~/my-new-branch。我将如何使用 hg 共享扩展来做到这一点?
这就是我一直在做的事情:
cd ~
hg share trunk my-new-branch
但是当我 cd 到新目录时我必须 hg 到分支?
困惑。
IMO share
是一个非常有用的命令,在某些情况下它比 clone
有一些很大的优势。但我认为不幸的是,在很多情况下它都被忽视了。
What share
does是在多个本地仓库之间复用'store'的Mercurial版本控制信息。 (它与分支没有直接关系。)
'store' 是一堆文件,代表 Mercurial 为您保存的所有历史记录。你不直接与它互动。它有 99.99% 的时间是黑盒子。
share
与更常用的 clone
命令的不同之处在于 clone
会复制信息存储,花费更长的时间到 运行 并且可能使用更多磁盘 space.
使用 share
而不是 clone
的 "side effect" 是你会立即在 every [=19] 中看到所有相同的提交=] 存储库。就好像 push/pull 在所有 shared
回购中自动发生一样。这对于 clone
是不正确的,您必须首先明确地 push/pull。这非常有用,但在您的工作流程中需要注意一些事情,因为如果您只习惯于 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
作为其默认 push/pull 位置,就像 working1
.
我自己的做法是创建大量本地 shared
存储库(快速、简单、节省 space)并在各个分支中工作。通常,出于各种原因,我什至会将其中一些放在同一个命名分支上,但设置为历史上的不同点。我不再觉得需要在本地(在同一台 PC 上)实际 clone
。
注意事项——我会避免在网络连接中使用共享——比如映射网络驱动器上的存储库。我认为这可能会遇到一些性能甚至可靠性问题。事实上,在任何情况下,我都不会使用 Mercurial 存储库(如果可以避免的话)来关闭网络驱动器。在本地克隆会更安全。
其次——I would read the docs,您可能会遇到一些奇怪的情况;但我认为这些不太可能只是基于我自己的经验。
最后说明:虽然 share 是作为 Mercurial 的 "extension" 实现的,但它实际上一直是 Mercurial 的一部分。所以它没有什么新的或实验性的,不要让 "extension" 交易让你失望。
假设我已经将一个 repo 克隆到一个名为 ~/trunk 的目录,并且我想将一个名为 my-new-branch 的分支共享到目录 ~/my-new-branch。我将如何使用 hg 共享扩展来做到这一点?
这就是我一直在做的事情:
cd ~
hg share trunk my-new-branch
但是当我 cd 到新目录时我必须 hg 到分支?
困惑。
IMO share
是一个非常有用的命令,在某些情况下它比 clone
有一些很大的优势。但我认为不幸的是,在很多情况下它都被忽视了。
What share
does是在多个本地仓库之间复用'store'的Mercurial版本控制信息。 (它与分支没有直接关系。)
'store' 是一堆文件,代表 Mercurial 为您保存的所有历史记录。你不直接与它互动。它有 99.99% 的时间是黑盒子。
share
与更常用的 clone
命令的不同之处在于 clone
会复制信息存储,花费更长的时间到 运行 并且可能使用更多磁盘 space.
使用 share
而不是 clone
的 "side effect" 是你会立即在 every [=19] 中看到所有相同的提交=] 存储库。就好像 push/pull 在所有 shared
回购中自动发生一样。这对于 clone
是不正确的,您必须首先明确地 push/pull。这非常有用,但在您的工作流程中需要注意一些事情,因为如果您只习惯于 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
作为其默认 push/pull 位置,就像 working1
.
我自己的做法是创建大量本地 shared
存储库(快速、简单、节省 space)并在各个分支中工作。通常,出于各种原因,我什至会将其中一些放在同一个命名分支上,但设置为历史上的不同点。我不再觉得需要在本地(在同一台 PC 上)实际 clone
。
注意事项——我会避免在网络连接中使用共享——比如映射网络驱动器上的存储库。我认为这可能会遇到一些性能甚至可靠性问题。事实上,在任何情况下,我都不会使用 Mercurial 存储库(如果可以避免的话)来关闭网络驱动器。在本地克隆会更安全。
其次——I would read the docs,您可能会遇到一些奇怪的情况;但我认为这些不太可能只是基于我自己的经验。
最后说明:虽然 share 是作为 Mercurial 的 "extension" 实现的,但它实际上一直是 Mercurial 的一部分。所以它没有什么新的或实验性的,不要让 "extension" 交易让你失望。