Kiln目前不支持在服务器上使用嵌套 URL 的子存储库。这意味着您不能同时使用以下 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
这很简单——只有四个普通的存储库。然后克隆“项目”并使用以下命令创建.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 中,我们通常建议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"
这将使用两个子存储库的当前提示变更集 ID更新000...
行。.hgsubstate
“project1”的未来克隆将注意到该.hgsubstate
文件,并确保将子存储库更新为其中提到的修订版。