我一直认为我了解 subrepos 以及如何使它们为我的团队工作流程工作,但显然我不了解,因为每次我尝试实现一些基本工作流程时,最终都无法正常工作。
我已经阅读了几乎所有关于 subrepos 在线阅读的内容,并且我遵循人们发布的所有琐碎示例,但是当我尝试做一些更复杂的事情时。或者,也许我确实非常了解它,而我正在尝试做的事情却不是很好。
让我们把基础知识排除在外。可以说我有一个远程“祝福”的回购集合。
http://acme.com/BlessedRepos/ProjA
/LibA
/LibB
所以我做了一个/ProjA
toC:\ProjA
和 clone /LibA
toC:\ProjA\LibA
和/LibB
to的克隆C:\ProjA\LibB
。我创建我的.hgsub
文件
LibA = http://acme.com/BlessedRepos/LibA
LibB = http://acme.com/BlessedRepos/LibB
我承诺一切。然后我可以推动ProjA
,一切都很好。
所以现在我团队中的某个人可以克隆/PrjoA
到它,C:\dev\ProjA
它也会作为 subrepos 关闭。这个人可以像我一样轻松地从“祝福回购”中推/拉。到目前为止这么好。LibA
LibB
现在,我说:好的,ProjA 团队,停止推送到有福的 repo,这是我在审查了你的工作后要做的。从现在开始,我希望大家将您的更改推送到位于以下位置的 ProjA 开发和 ProjA QA 远程存储库:
http://acme.com/Dev/ProjA
http://acme.com/QA/ProjA
这是我们停下来的地方。试图推到http://acme.com/Dev/ProjA
只会推/ProjA
,而/ProjA/LibA
被推/ProjA/LibB
回他们在祝福回购中的原始位置,而不是http://acme.com/Dev/ProjA
.
现在,我可以将我的.hgsub
文件设置为LibA = ../LibA
. 这最初会起作用,但如果我ProjA
要从祝福的回购中克隆,它无法获得LibA
or LibB
,我相信因为它期望找到本地回购LibA
并且LibB
作为ProjA
我正在克隆的回购的兄弟姐妹。我的意思是,如果我克隆到http://acme.com/BlessedRepos/ProjA
它C:\Test\ProjA
会失败,因为它希望在C:\Test\LibA
.
我也可以将我的 hgsub 设置为LibA = LibA
. 但是,当您尝试推送到受祝福的 repo 时,这样做会失败,因为LibA
它不是嵌套ProjA
在受祝福的空间中。我可以创建它们,但是我从不推回http://acme.com/BlessedRepos/LibA
,只推到http://acme.com/BlessedRepos/ProjA/LibA
,然后似乎已经破坏了 subrepo 的目的。
我很确定我的第一种方法可以工作,如果我也有一些我会运行的脚本将通过并将.hgsub
文件中的所有值从“祝福”远程位置更改为“开发”和“质量检查”位置,但这似乎不太理想。
所以。如果有人真的很喜欢这些东西,你能否向我解释我哪里出错了,或者我如何使用 subrepos 实现我的原始工作流程,或者只是确认我正在追求的东西不是非常适合子回购。如果有助于理解情况,我们可能有 15-20 个“产品/解决方案”和 50 个“共享”项目。15-20 个产品中的任何一个都可以在其解决方案中使用 50 个共享项目中的 N 个。