1

我有一个父存储库 A。

我创建了一个父存储库的小型子存储库 B,其中包含一个精心挑选的子文件夹小列表,供另一个团队使用 hg-convert 访问

hg convert A B --filemap filemap.txt

其中 filemap.txt 不进行任何重命名。它仅包括或排除文件夹。如:

exclude *
include folder1
include folder2/subfolder1
include folder2/subfolder2
include folder2/subfolder3
exclude folder3_that_was_pulled_in_for_some_reason

从 A 转换为 B 工作正常。我还可以重新运行 hg convert 命令以将 A 上的后续更改“推送”到 B(我在这里松散地使用术语推送......)

但是当我想将 B 的更改“推”回 A 时呢?在没有文件映射的情况下运行 hg convert BA 会在 A 中重新创建 B 中的所有提交,因此我在 A 中有大量重复的提交。

将来有没有合理的方法使 A 和 B 保持同步?如果以不同的顺序对 A 和 B 应用更改,这可能是不可能的吗?

4

1 回答 1

2

没有好的方法可以做到这一点,这就是为什么convert不应该成为双向工作流的一部分。可以convert增量使用,因此您可以多次将 A 转到 B,但不能将 B 转到 A。您可以尝试将hg exportB 和它们的补丁打到hg importA,它可能会起作用,但是当您然后hg convertA再次进入B,他们会加倍,合并可能会很困难。

考虑将存储库拆分为两个单独的存储库,将公共内容作为整个存储库的子存储库。

/projectname
    stuff.txt
    /folder1
    /folder3_that_was_pulled_in_for_some_reason
    /projectname-public
        /folder2/subfolder1
        /folder2/subfolder2

projectname-public是一个子存储库时,它可以单独克隆,单独发布,您可以轻松地接受拉取请求并修补和合并它们。

Subrepos 不适合初学者,但它们比往返于convert.

于 2013-10-12T02:24:30.743 回答