是否可以将Mercurial子路径路径从绝对路径更改为相对路径

时间:2010-09-20 11:55:37

标签: mercurial subrepos

最初我的subrepo是用.hgsub中的绝对URL定义的,现在导致一些麻烦。它使得“友好的独裁者”工作流程变得不可能,因为我想使用一个中间服务器,用户从中间服务器克隆其工作副本。然后我将更改提取到中间服务器,然后将它们推送到主存储库(中间服务器也是持续集成主机,因此我不会直接将内容提取到主服务器)。绝对路径会阻止这种情况,因为克隆的repo会被直接推送到主服务器。

现在问题是当我尝试推送hg文件中的更改时,我的.hgsub服务器会发出404错误。以下是我所做的更改的示例

# original subrepo definition
common = http://hgserver/disp/common
# and after the change
common = common

这不起作用,它会发出以下错误

$ hg push
pushing to http://hgserver/disp
pushing subrepo common
abort: HTTP Error 404: Not Found

是否可以通过这种方式更改subrepo配置,还是必须重新创建整个存储库?

2 个答案:

答案 0 :(得分:3)

是的,它应该是可更改的(并且你是正确的,亲戚可以提供更好的工作流程),但是,相对url路径被视为相对于hg root的repo .hgsub。 1}}生活 - 而不是你正好推动的地方(来自.hg/hgrc deafult部分的paths on server http://hgserver/disp/main http://hgserver/disp/common # the "common" repo http://hgserver/disp/main # the main repo http://hgserver/disp/main/.hgsub # contains "common=../common" 条目。

这是一个非常正常的subrepo布局:

"../sibling"

然后在克隆之后一切正常,同样的hgsub也可以在服务器上正常工作。

有很多堆栈溢出问题,人们可以通过最佳布局进行相对subrepo设置,虽然我没有尝试从一个切换到另一个我认为如果你做的“旁边”风格的子回复{{1}}我在上面显示它会正常工作。

答案 1 :(得分:1)

请注意,在以下情况下存在(编辑)问题:

  1. 使用ssh(top repo)
  2. 相对于顶部列出的子目录(根据此处建议 - 通常需要) - 和
  3. 绝对路径引用的top(ssh)repo。
  4. http://mercurial.808500.n3.nabble.com/subrepos-with-ssh-urls-with-absolute-paths-td1462834.html。从本质上讲,它强制在.hgsub文件中使用绝对路径 - 这会打破引用的“友好的独裁者”/集成服务器工作流程。

    一个解决方案很多,但是现在我们必须使用绝对路径并在[subpaths]部分中进行每用户重新映射。 : - (

    注意:现在已修复: https://www.mercurial-scm.org/repo/hg-stable/rev/71ea5b2b9517这是Hg版本1.8.3(及更高版本)