2012-01-14 65 views
0

我一直试图按照窑炉的回答this question中的说明操作。在osx上设置mercurial/kiln subrepos

我希望能够安排的事情如下:

  • /somepath/thirdparty映射到窑库“第三方”,包含配套代码
  • /somepath/common映射到窑库“普通”,并含有共享代码我写

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

  • /somepath/project2映射到窑库 “PROJECT1”
  • /somepath/project2/thirdparty映射到第三方以上的另一分支
  • /somepath/project2/common映射到的共同另一支以上

我发现,当我创建的.hgsub文件的指示,并添加/它推到窑,我再也无法查看窑内网络文件浏览器窑文件 - 它显示了关于窑“过热”的模糊信息:-)另外,虽然它自动在正确的位置创建了子文件夹,但它们没有填充文件(可能是因为拉出失败)。

以前有没有人试过类似的东西,用窑?

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

+0

@马丁盖斯勒 - 感谢编辑,现在阅读起来更容易! – unsynchronized 2012-01-14 08:51:57

+0

没问题,我很高兴整理一下! :) – 2012-01-14 08:54:03

回答

2

currently not support subrepos that use nested URLs on the server。这意味着,你不能有以下两个网址的工作:

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

所以你应该设置窑,让你在服务器上库:

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 

当你把那回窑,它会发现,为subrepositories显示链接。但是,子目录不会最终被嵌套在服务器上。所以那里不会有任何project1/thirdparty路径在服务器上。

这也是很不清楚,你会想要的。当你有几个合作并使用一些通用代码库的项目时,你需要“project1”和“project2”来获取对方对这个通用代码库的更改。所以这两个项目中的common subrepo推送和从http://server/kiln/somepath/common拉动非常有用。

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

当您最初设置子库时,请记住您需要手动更新它们。因此,通过上述网址,您可以通过运行设置“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 

要填充subrepositories你做

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

这将更新000...线.hgsubstate与两个subrepos当前提示变更标识。未来的“project1”克隆将会注意到.hgsubstate文件,并确保将subrepos更新为此处提及的修订版。

+0

嗯,这似乎是我如何设置和它失败(我没有嵌套在服务器上的回购站,但只在本地)。我会仔细观察,看看我的方法与你的答案有何不同,以及可能导致错误的原因。谢谢。 – unsynchronized 2012-01-14 09:02:23

+0

据我可以告诉一切设置相同,除了它使用https://而不是http://(我的[auth]部分我的home文件夹中的.hgrc文件具有窑登录的相应登录凭据) 。我的实际路径有我不想在这里发布的有意义的名称,但除此之外,它在语义上是相同的。 – unsynchronized 2012-01-14 09:34:52

+0

好吧,奇怪。当你“克隆”这个项目时,Mercurial会简单地“克隆”这个子目录。所以试着手工克隆'server/kiln/common'。如果这不起作用,那么窑的回购有些问题。我想你知道这一点,但subrepo并不特别 - 它只是服务器上的正常回购。其他回购可以在'.hgsub'文件中引用它,但subrepo不会“知道”这一点。 – 2012-01-14 09:52:27