在osx上设置mercurial / kiln subrepos

时间:2012-01-14 08:15:44

标签: mercurial dvcs kiln mercurial-subrepos

我一直在尝试按照this question的答案,使用窑。

我希望能够安排如下事项:

  • /somepath/thirdparty映射到窑库“thirdparty”并包含各种代码
  • /somepath/common映射到窑库“common”并包含我编写的共享代码

  • /somepath/project1映射到kiln repository“project1”
  • /somepath/project1/thirdparty映射到
  • 上面的第三方分支
  • /somepath/project1/common映射到上面的公共分支

  • /somepath/project2映射到kiln repository“project1”
  • /somepath/project2/thirdparty映射到上面第三方的另一个分支
  • /somepath/project2/common映射到上面的另一个常见分支

我发现当我按照指示创建.hgsub文件并将其添加/推送到Kiln时,我再也无法在Kiln Web文件查看器中查看Kiln文件了 - 它显示了关于Kiln的一个模糊信息“过热“:-)此外,虽然它确实在正确的位置自动创建子文件夹,但它们没有填充文件,(可能是因为拉动失败)。

以前有人用窑做过这样的事吗?

由于我打算使用公共代码开发大量应用程序(并且可能最终将库作为开放源代码发布),我希望在独立的存储库中进行管理。然而,由于某些项目是针对最终客户的,因此我需要能够为他们提供一个包含上述内容的存储库。

1 个答案:

答案 0 :(得分:2)

Kiln currently not support subrepos that use nested URLs on the server。这意味着您不能同时使用以下两个URL:

http://server/kiln/somepath/project1
http://server/kiln/somepath/project1/thirdparty

因此,您应该设置Kiln,以便在服务器上有四个存储库:

http://server/kiln/somepath/project1
http://server/kiln/somepath/project2
http://server/kiln/somepath/thirdparty
http://server/kiln/somepath/common

这很容易 - 只有四个普通的存储库。然后克隆“project”并使用以下命令创建.hgsub文件:

thirdparty = http://server/kiln/somepath/thirdparty
common = http://server/kiln/somepath/common

当您将其推回到Kiln时,它会注意并显示子库的链接。但是,子库不会最终嵌套在服务器上。所以服务器上不会有任何project1/thirdparty路径。

你还想要那个也很明显。如果您有多个项目协作并使用一些通用代码库,那么您希望“project1”和“project2”能够相互更改此公共代码库。因此,两个项目中的common子参数从http://server/kiln/somepath/common推送和拉出非常有用。

在Mercurial中,我们normally recommend您使用common = common文件中.hgsub形式的路径。这意味着服务器必须支持嵌套的存储库。当Kiln不支持嵌套式存储库时,您可以使用完整路径。

最初设置子存储库时,请记住您需要手动更新它们。因此,使用上述URL,您可以通过运行:

来设置“project1”
$ hg clone http://server/kiln/somepath/project1
$ echo "common =     http://server/kiln/somepath/common" > .hgsub
$ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub
$ hg commit -m "Created subrepos"

这会创建初始的空子存储库。它们是空的,因为你没有告诉Mercurial你需要哪些改变。这会在.hgsubstate跟踪,您可以在其中找到:

0000000000000000000000000000000000000000 common
0000000000000000000000000000000000000000 thirdparty

填充您执行的子存储

$ cd common
$ hg pull --update
$ cd ../thirdparty
$ hg pull --update
$ cd ..
$ hg commit -m "Updated subrepos"

这会更新000...中的.hgsubstate行,其中包含两个子目录的当前提示更改集ID。 “project1”的未来克隆会注意到.hgsubstate文件,并确保将子目录更新到那里提到的修订版。