我一直在想我理解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
,它也会将LibA
和LibB
作为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
,则无法获得ProjA
或LibA
,我相信因为它希望找到本地回购{ {1}}和LibB
作为我正在克隆的LibA
回购的兄弟姐妹。我的意思是如果我克隆到LibB
到ProjA
它会失败,因为它希望在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个共享项目。
答案 0 :(得分:1)
您缺少的关键部分是您可以在服务器上多次公开LibA
和LibB
存储库,而无需在服务器上安装多个副本。有关详细信息,请see my answer关于subrepos的其他问题。
另外,如果您遇到类似问题,请在#mercurial与我们联系 - 这比在StackOverflow上撰写长篇文章要好得多,因为那不是Mercurial社区的地方。您也可以使用我们的邮件列表。