在Mercurial上有公共回购(不是我的)。它包含两个子存储库。我已经为两个主存储库和两个子存储库制作了一个分叉。我想不时创建拉取请求,但我无法使子存储库正常工作。 当我克隆我的分叉存储库时,它将被下载,但两个子存储库将保持原始状态,而不是我的分支存储库。如果我用分叉替换它们,我将无法发出拉取请求,因为我不想将原始存储库切换到我的子存储库。但是我想更改存储库和子存储库。 一旦我找到解决方案。我已经修改了子存储库的 .hg 文件夹中的 hgrc 文件。
It was:
[paths]
default = ssh://hg@bitbucket.org/originator/subrepo
它变成:
[paths]
Me = ssh://hg@bitbucket.org/Me/subrepo
Original = ssh://hg@bitbucket.org/originator/subrepo
它完全按照应有的方式工作。我已经更改了代码,推送到我的子存储库,为子存储库创建了拉取请求。然后我在主存储库中推送了更改,它只是工作。.hgsubstate 现在引用存在于分叉存储库上的提交,但不引用原始存储库上的提交。当 orignator 将同时处理两个拉取请求时,一切都会正常工作。
我说,它以前有效,但现在不行。出于某种奇怪的原因,我不能只是将 .hgsubstate 推送到分叉子存储库上存在的新子存储库修订版。我根本无法将其包含在提交中。我单击"提交",但结果提交不包括在内。而且我不知道如何强制被包括在内 - HG 对此太"聪明"了。TortoiseHG也标记我的子仓库是脏的。但是,如果我尝试同时添加 .hgsubstate 和我的脏存储库,它会出于某种原因尝试将更改推送到发起人的存储库。似乎我的 HG 无法在不将更改推送到子存储库的情况下提交 .hgsubstate。 有什么办法可以解决这个问题吗?我想要的只是提交和推送 .hgsubstate,而不做任何其他事情。
您是否相应地调整了 .hgsub,使其适用于本地路径以及推送到服务器的远程路径?
建议添加到您的 .hgsub 部分,这些部分在绝对意义上描述路径。当我在服务器上的 dir 结构中将子存储库作为同一级别时,我曾经为此苦苦挣扎,但希望它们在我自己的计算机上作为子目录。它帮助我向 .hgsub 添加一个子路径部分:
[subpaths]
ssh://user@host.org/path/subrepo1 = ssh://user@host.org/subrepo1
ssh://user@host.org/path/subrepo2 = ssh://user@host.org/subrepo2
/home/user/project/subrepo1 = /home/user/subrepo1
/home/user/project/subrepo2 = /home/user/subrepo2
project/subrepo1 = subrepo1
project/subrepo2 = subrepo2