4

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

现在的问题是,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

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

4

2 回答 2

3

是的,它应该是可变的(你说得对,relative 可以提供更好的工作流程),但是,相对 url 路径被视为相对于生活所在hg root的 repo 的路径.hgsub——而不是你碰巧所在的位置push (来自该部分中.hg/hgrcdeafult条目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"

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

有很多堆栈溢出问题,人们遍历相对子存储库设置的最佳布局,虽然我没有尝试从一个切换到另一个,但我想如果你用我做子存储库的“next to”"../sibling"风格在上面显示它会正常工作。

于 2010-09-20T14:23:09.887 回答
1

请注意,在以下情况下存在问题:

  1. 使用 ssh(顶级仓库)
  2. 相对于顶部列出的子存储库(如此处建议 - 并且通常需要) - 和
  3. 绝对路径引用的顶级 (ssh) 存储库。

请参阅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(及更高版本)

于 2010-12-08T10:45:16.493 回答