汇总问题:
是否可以在mercurial / kiln存储库中使用github托管的子存储库,如果是这样,当hg clone
或hg 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来处理它?
答案 0 :(得分:1)
我是否正确地说当我克隆父(mercurial)repos时,这些文件将从github中提取,而不必使用git单独管理它?
是的,克隆包含子库的Mercurial存储库也会触发子库的克隆。它确实是happens on update。 Mercurial会注意到.hgsub
文件,并为您发出所需的hg clone
和git clone
命令。它使用.hgsubstate
中的信息确切地知道要结帐的修订版。
子存储库可以托管在任何地方。对于声明为
的Git子存储库foo = [git]https://github.com/user/repo.git
Mercurial只会发出相应的克隆命令:
git clone https://github.com/user/repo.git foo
然后你的责任是稍后进入foo
repo并使用Git根据需要获取新的提交。在获取/拉取新提交后,您可以进行顶级提交以在.hgsubstate
文件中记录子状态的新状态。在这种意义上,使用hg summary
查看subrepo是否脏。
[...]我需要使用git来管理本地文件的修订版,还是会通过代理执行此操作?例如id我是hg commit -S会不会代表我调用git来处理它?</ p>
当您编辑文件并创建顶级hg commit
时,Mercurial会确保首先提交子参数(如果您使用hg commit -S
或ui.commitsubrepos=True
)。如果您进行顶级推送,那么Mercurial将始终首先推送子版本,以便您的服务器上始终有一组一致的更改。