在一个mercurial(kiln)存储库中嵌入一个github存储库 - 它是如何集成的?

时间:2012-01-18 22:36:31

标签: mercurial github kiln

汇总问题:

是否可以在mercurial / kiln存储库中使用github托管的子存储库,如果是这样,当hg clonehg commit命令对父级mercurial存储库进行操作时,它们会自动更新/克隆吗? / p>

详细问题:

继我的问题得到了如此出色的回答后here,我的一些第三方代码存放在我刚刚从github上的开源工作中下载的文件夹中。因为在那个阶段我没有使用版本控制,那些只是标准文件夹的文件夹现在被合并为mercurial中的子库。

这显然不是理想的,因为有一件事,新版本的库可能有错误修复,或者我希望将来使用的新功能。我也可能需要在本地自定义一些库。

我可以从阅读this link看到可能对这些git服务器URL(以及修订版)有“知道”,所以我可以直接从他们的父存储库中获得github托管库的mercurial clone。 / p>

我是否正确地说当我克隆父(mercurial)repos时,这些文件将从github中提取,而不必使用git单独管理它?

还不清楚的是,如果我这样做,并且发现代码可能需要在github克隆的存储库中进行自定义,我是否需要使用git来管理本地文件的修订,或者代理人会这样做吗?例如id hg commit -S我会代表我使用git来调用git来处理它?

1 个答案:

答案 0 :(得分:1)

  

我是否正确地说当我克隆父(mercurial)repos时,这些文件将从github中提取,而不必使用git单独管理它?

是的,克隆包含子库的Mercurial存储库也会触发子库的克隆。它确实是happens on update。 Mercurial会注意到.hgsub文件,并为您发出所需的hg clonegit clone命令。它使用.hgsubstate中的信息确切地知道要结帐的修订版。

子存储库可以托管在任何地方。对于声明为

的Git子存储库
foo = [git]https://github.com/user/repo.git

Mercurial只会发出相应的克隆命令:

git clone https://github.com/user/repo.git foo

然后你的责任是稍后进入foo repo并使用Gi​​t根据需要获取新的提交。在获取/拉取新提交后,您可以进行顶级提交以在.hgsubstate文件中记录子状态的新状态。在这种意义上,使用hg summary查看subrepo是否脏。

  

[...]我需要使用git来管理本地文件的修订版,还是会通过代理执行此操作?例如id我是hg commit -S会不会代表我调用git来处理它?<​​/ p>

当您编辑文件并创建顶级hg commit时,Mercurial会确保首先提交子参数(如果您使用hg commit -Sui.commitsubrepos=True)。如果您进行顶级推送,那么Mercurial将始终首先推送子版本,以便您的服务器上始终有一组一致的更改。