0

我一直认为我了解 subrepos 以及如何使它们为我的团队工作流程工作,但显然我不了解,因为每次我尝试实现一些基本工作流程时,最终都无法正常工作。

我已经阅读了几乎所有关于 subrepos 在线阅读的内容,并且我遵循人们发布的所有琐碎示例,但是当我尝试做一些更复杂的事情时。或者,也许我确实非常了解它,而我正在尝试做的事情却不是很好。

让我们把基础知识排除在外。可以说我有一个远程“祝福”的回购集合。

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

所以我做了一个/ProjAtoC:\ProjA和 clone /LibAtoC:\ProjA\LibA/LibBto的克隆C:\ProjA\LibB。我创建我的.hgsub文件

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

我承诺一切。然后我可以推动ProjA,一切都很好。

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

现在,我说:好的,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要从祝福的回购中克隆,它无法获得LibAor LibB,我相信因为它期望找到本地回购LibA并且LibB作为ProjA我正在克隆的回购的兄弟姐妹。我的意思是,如果我克隆到http://acme.com/BlessedRepos/ProjAC:\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 个。

4

1 回答 1

1

您缺少的关键部分是您可以在服务器上多次公开LibA和存储库,而无需在服务器上拥有多个副本。LibB有关详细信息,请参阅我对有关 subrepos 的另一个问题的回答。

另外,如果您有类似的问题,请在#mercurial与我们交谈——这比在 StackOverflow 上写长篇文章要好得多,因为无论如何 Mercurial 社区都不是这样。您也可以使用我们拥有的邮件列表。

于 2011-09-23T13:55:27.870 回答