保持子站点在中央服务器上同步

时间:2011-09-22 15:57:29

标签: mercurial subrepos mercurial-subrepos

我一直在想我理解subrepos以及如何让它们适用于我的团队工作流程,但显然我不这样做,因为每次我尝试实现一些基本的工作流程时,某些东西都不能正常工作。

我已经阅读了几乎所有关于subrepos在线阅读的内容,并且我会关注人们发布的所有简单示例,但是当我尝试做一些更复杂的事情时。或者我可能完全理解它,而我正在努力做的事情并不是那么有效。

让我们了解基础知识。可以说我有一个远程“祝福”的回购集合。

http://acme.com/BlessedRepos/ProjA
                            /LibA
                            /LibB

所以我将/ProjA克隆到C:\ProjA并将/LibA克隆到C:\ProjA\LibA,将/LibB克隆到C:\ProjA\LibB。我用

创建了我的.hgsub文件
LibA = http://acme.com/BlessedRepos/LibA
LibB = http://acme.com/BlessedRepos/LibB

我承诺一切。然后我可以推ProjA,一切都很顺利。

所以现在我的团队中的某个人可以将/PrjoA克隆到C:\dev\ProjA,它也会将LibALibB作为subrepos。这个人可以像我一样轻松地从“受祝福的回购”推/拉。到目前为止一切都很好。

现在,我说:好吧,ProjA团队,继续推进祝福的回购,这是我在审查你的工作后做的。从现在开始,我希望大家将您的更改推送到位于以下位置的ProjA开发和ProjA QA远程回购:

http://acme.com/Dev/ProjA
http://acme.com/QA/ProjA

这是我们停下来的地方。尝试推送到http://acme.com/Dev/ProjA只会推送/ProjA,而/ProjA/LibA/ProjA/LibB会被推回原来位于祝福仓库中的原始位置而不是{{1}的所需位置}}

现在,我可以将http://acme.com/Dev/ProjA文件设置为.hgsub。这最初会起作用,但是如果我要从受祝福的仓库中复制LibA = ../LibA,则无法获得ProjALibA,我相信因为它希望找到本地回购{ {1}}和LibB作为我正在克隆的LibA回购的兄弟姐妹。我的意思是如果我克隆到LibBProjA它会失败,因为它希望在http://acme.com/BlessedRepos/ProjA找到现有的回购。

我也可以将我的hgsub设置为C:\Test\ProjA。但是当你试图推送到受祝福的回购时,这样做会失败,因为C:\Test\LibA不是在祝福空间中嵌套LibA = LibA。我可以创建它们,但之后我永远不会回到LibA,只回到ProjA,然后它似乎已经打败了subrepo的目的。

我很确定我的第一个方法可以工作,如果我还有一些我会运行的脚本,并将http://acme.com/BlessedRepos/LibA文件中的所有值从“有福”的远程位置更改为“开发“和”QA“的位置,但这似乎不太理想。

因此。如果那里有任何人真正了解这些东西,你能解释一下我出错的地方,或者我如何使用subrepos实现我原来的工作流程,或者可能只是确认我正在寻找一些不是非常适合subrepos。如果它有助于了解情况,我们可能会有类似15-20“产品/解决方案”和50个“共享”项目。 15-20个产品中的任何一个都可以在其解决方案中使用N个50个共享项目。

1 个答案:

答案 0 :(得分:1)

您缺少的关键部分是您可以在服务器上多次公开LibALibB存储库,而无需在服务器上安装多个副本。有关详细信息,请see my answer关于subrepos的其他问题。

另外,如果您遇到类似问题,请在#mercurial与我们联系 - 这比在StackOverflow上撰写长篇文章要好得多,因为那不是Mercurial社区的地方。您也可以使用我们的邮件列表。