【问题标题】:How to make mercurial (hg) outer repositories ignore the existence of inner (non-sub) repositories如何使 mercurial (hg) 外部存储库忽略内部(非子)存储库的存在
【发布时间】:2012-04-06 21:34:54
【问题描述】:

简而言之,我怎样才能使外部 mercurial 存储库完全不知道给定内部存储库的存在?我基本上只是想忽略子文件夹中某些 .hg* 的存在,并让外部存储库继续其快乐的方式。

换句话说,我希望有两个彼此无关的 mercurial 存储库,但恰好跟踪同一个文件。是 - 对该文件的编辑必须提交两次,等等;但在这种情况下,这就是我想要的。

背景:

我正在回避 mercurial 无法处理部分克隆的问题,但我相信它会起作用。我们有一个巨大的项目树检查到 mercurial,承包商需要访问这棵树的一部分。我对子存储库方法的理解是很难回溯到现有的树中。无论如何,我不想强​​迫我所有的同事这样做,以便我可以与一个承包商合作。

我想做的是在我们整个项目树的克隆中的一两个文件夹中创建内部存储库。然后我计划将这些内部存储库进一步克隆给承包商。这不是最好的,但它会起作用;在他推送给我之后,我可以合并到内部存储库触及的文件,然后走到外部存储库检查我们的整体树。理想情况下,从外部存储库的角度来看,似乎某些魔法只是更新了一些文件。

问题在于,mercurial 似乎对自己了解太多了 :)。例如,使用 hg init、hg add * 和 hg clone 时一切正常;但是当他在他的末尾添加了一个新文件并且我去 hg add 在外部存储库中时,我得到(混淆):

中止:路径 'foo/bar.txt' 在 repo 'foo' 内

我可以通过将内部存储库的 .hg 重命名为其他名称来解决此问题,但总的来说,这种方法已经失控。 hg stat 忽略内部存储库也有问题;以及我试图从外部存储库执行的其他命令和其他操作通常会中断(我在与承包商共享的文件夹中的一个子存储库中遇到了很多麻烦)。

有什么想法吗?

(我确实提出了一个理论上的解决方案:在我的文件系统的其他位置创建另一个存储库 baz/,然后使用文件系统符号链接从原始树中提取文件夹。但后来我硬连线到一台给定的机器来桥接两个存储库,我担心这种方法会产生我没有想到的其他后果。从外部的角度隐藏内部存储库会更方便。)

谢谢!

【问题讨论】:

标签: mercurial


【解决方案1】:

我不认为有办法做你想做的事,但是将子目录变成子存储库并不难。唯一需要注意的是,一旦目录成为子存储库,就可以更容易地在拆分前和拆分后的历史记录之间来回切换。

对于这个示例,我有以下目录结构,并且我为每个文件伪造了一些历史记录:

org
 + file1
 + dir
    + file2

第 1 步 - 启用 convert 扩展。
第 2 步 - 创建文件映射以将 dir 历史记录移动到其自己的存储库的根目录。示例:

include dir
rename dir .

第 3 步 - 运行转换,创建一个不同名称的目录。 第 4 步 - 将新目录移到原项目下。
第 5 步 - 从原项目中删除旧目录。
第 6 步 - 在新的子存储库中,更新到最新版本。
第 7 步 - 在原始存储库中,添加引用新子存储库的 .hgsub 文件。
第 8 步 - 添加 .hgsub 文件,修复所有引用旧目录的项目路径并提交。

例子:

hg convert --filemap filemap org sub
move sub org
cd org
hg remove dir
cd sub
hg update tip
cd ..
echo sub=sub >> .hgsub
REM Fix up other project paths referencing dir->sub.
hg ci -Am "Converted 'dir' to repo 'sub'."

现在您已经为承包商维护了历史记录,并且可以更新到旧版本或新版本的主要历史记录而不会发生冲突。当您更新到 sub 存在之前,Mercurial 会正确地将 sub 更新为 null 父级,并且 dir 将出现在历史记录中。更新到历史的尖端,dir 消失,sub 更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2011-03-05
    相关资源
    最近更新 更多