【问题标题】:Mercurial workflow with subrepositories and offline clones?带有子存储库和离线克隆的 Mercurial 工作流程?
【发布时间】:2011-03-03 05:35:47
【问题描述】:

我经常离线。

所以通常情况下,我使用一个本地克隆作为功能、错误等的“中心”。

hg clone local-hub bug-123

离线工作。很酷。

如果该项目包含远程子存储库,我可以使用类似的工作流程吗?

因为,如果 .hgsub 说

sub/shared = http://server/hg/shared

hg 克隆说

abort: error: getaddrinfo failed

请注意,一旦创建了克隆(连接时),pushpull 将使用子存储库的 hgrc 中的路径(而不是 .hgsub 中的位置)。所以我可以把它指向一个本地克隆,一切都很酷。

但是clone 看着.hgsub(正如它应该的那样)。因此,如果“祝福”子存储库在服务器上,我无法离线创建新的克隆,即使我需要的文件就在那里。

这是个问题,对吧?

【问题讨论】:

    标签: mercurial workflow offline subrepos


    【解决方案1】:

    理想情况下,设置项目的人在他们的 .hgsub 文件中使用相对 URL,如下所示:

    sub/shared = ../shared
    

    然后,当然,实际上使 shared 成为主 repo 的兄弟。然后,只要您克隆了主仓库和子仓库(作为兄弟姐妹),那么一切都会好起来的。

    如果他们在 .hgsub 文件中使用了绝对 URL,您可以使用 .hgrc 中的子路径部分来解决它,如下所示:

    [subpaths]
    http://server/hg/shared = ../shared
    

    它在您的客户端中提供了一个翻译层。

    【讨论】:

    • 嘿,谢谢!在我对这个主题的研究中,我读了很多你的文章……你在这里是一个伟大的贡献者。两种选择都有优点,我将不得不考虑哪个最适合我。再次感谢!
    • 好的,有一个不麻烦的症结;-) 是我自己还是很难弄清楚子回购?
    • @qes 诚然,他们很难弄清楚。部分麻烦在于大多数 Mercurial 开发人员不使用它们,而那些使用它们的人只是在处理影响他们的用例。
    【解决方案2】:

    使用子存储库的规范方法是在 .hgsub 文件中包含 X = X 路径:

    sub/shared = sub/shared
    

    这样一来,克隆在结构上将与原始版本一模一样——因此您可以使用该克隆来制作更多(本地!)克隆。

    但是,这并不总是可行的,例如,Bitbucket 不允许您在其服务器上创建嵌套存储库。在这种情况下,.hgsub 文件中的../X 样式路径更好,您可以使用subpaths configuration section 将这些路径转换为您可以在本地使用的路径。

    【讨论】:

    • 谢谢,马丁。 SO的点; 2 个回复,均来自该主题的专家。我绝对对 subrepos 的最“规范”使用感兴趣。但是 sub/shared = sub/shared 是否暗示 subrepo “生活”在父级之下,因此不是真正共享的?换句话说,既然 .hgsub 实际上是被跟踪的,那么右边不应该是通往“祝福”子仓库的路径吗? ../X 似乎是最灵活的解决方案。只要 ../X 是一个有效的位置,那么克隆看起来就像原来的一样。
    • @harpo:不,它们仍然可以在服务器上共享。请参阅my other answer 了解实现此目的的三种不同方式。
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2011-11-16
    • 2012-02-05
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多