Mercurial共享扩展:如何取消共享?

时间:2010-08-16 13:36:02

标签: mercurial

我正在使用Windows上的TortoiseHG 1.1.1提供的Mercurial 1.6.4中的Mercurial共享扩展(XP 32位)。

更多信息: https://www.mercurial-scm.org/wiki/ShareExtension

我一直在使用分享扩展,在两个方向都很好用。 主要仓库位于本地硬盘上,共享仓库位于网络共享上(AIX上的Samba)。

现在我想删除一个共享链接(必须在双方都知道,因为它们会相互更新)。我怎么做?我在网上找不到任何东西......“分享”,“取消共享”这些词语并不是很容易上传。

任何帮助表示赞赏,亲切的问候,Tijs

1 个答案:

答案 0 :(得分:8)

我认为你误解了这种延伸。 (很少使用!)共享扩展是指当你想要多个工作目录指向同一个底层存储库时 - 而不是repos和工作目录之间更正常的一对一关系。

没有取消共享,因为没有双向链接。

以下是解释:

您使用hg inithg clone创建新的仓库:

repoA
\-- .hg (repoA's repository)

如果您创建了另一个克隆,那么您将拥有另一个工作目录,其中包含另一个存储库。这是99.9%的时间。

repoA  (the one you already had)
\-- .hg (repoA's repository)

repoB  (the new clone)
\-- .hg (repo B's repository)
    \-- hgrc (config file with a [paths] default=../repoA)

但是,如果您使用hg share,您将获得以下内容:

repoA  (the one you already had)
\-- .hg (repoA's repository)

repoB  (the new shared repo)
\-- .hg (a symlink-like pointer to ../repoA/.hg)

因此它看起来是双向的,因为它们在封面下具有完全相同的回购。如果他们在不同的机器/卷上,那么repoB如果repoA不可用则无法使用 - 这与DVC应该为您做的相反。

所以,回答你通过删除repoB来“取消链接”。如果repoB中有未提交的文件,你不想提交到repoA,你可以这样做:

hg clone -U repoA newRepoB  # create a clone with no working dir
cp -a repoB/* newRepoB    # excludes all files including .hg (and other .* files)

TL; DR:不要使用share;它几乎永远不是正确的选择。