0

我一直在尝试使用 kiln.按照这个问题的答案中的说明进行操作。

我希望能够安排如下:

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

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

  • /somepath/project2映射到窑库“project1”
  • /somepath/project2/thirdparty映射到上述第三方的另一个分支
  • /somepath/project2/common映射到上面 common 的另一个分支

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

以前有人用Kiln尝试过这样的事情吗?

由于我打算使用通用代码开发许多应用程序(并可能最终将库作为开源发布),我希望将其管理在离散的存储库中。但是,由于某些项目是针对最终客户的,因此我需要能够为他们提供一个包含上述内容的单一存储库。

4

1 回答 1

2

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文件,并确保将子存储库更新为其中提到的修订版。

于 2012-01-14T08:51:12.687 回答