【发布时间】:2011-06-14 18:33:30
【问题描述】:
我有一个使用相当标准的源代码树方法 + 反复无常的子存储库的主项目。
Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process
\source\contrib - contains any subrepos like so:
\source\contrib\Sub1
\source\contrib\Sub2
Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1
现在,最近确定 Sub2 需要来自 Sub1 的一些代码,因此我必须针对这个新的依赖结构进行调整。
问题当然是,如果我按照上面相同的方法添加 Sub1 作为 Sub2 的子存储库,我最终会遇到这种丑陋的情况。
\source\contrib\Sub2\source\contrib\Sub1
Master 现在拥有 Sub1 的 2 个独立副本!
所以我知道在引用 subrepos(= 的 RHS)时我应该使用相对路径——但据我了解,这对我的场景没有帮助。我不认为有任何方法可以使 LHS 在主存储库之外运行,我认为这是我在这里真正需要的。
我对如何解决这个问题有一些想法,但没有一个适合我,我认为必须有更好的方法。我理想的解决方案允许我在多个项目之间共享相同的子存储库,而无需支付拥有多个副本的代价。在我的场景中,这似乎既浪费又低效(另外,我希望所有依赖 Sub1 的项目都使用相同的 hg 修订,而不是独立修订)
将 Sub1 作为 Master 的子存储库删除,并更改 Master 解决方案中的任何相对路径以引用双重嵌套的 Sub1。这个路径结构不仅可怕,而且如果添加一个依赖于 Sub1 的 Sub3 到 master,我仍然有两个 Sub1 的副本。
编译 Sub1 的副本并将其放入 \lib 目录。 Sub1 仍在经历一些混乱,我宁愿针对源版本进行构建。我不想一直为不断地将新的二进制文件复制到源代码树(并使树膨胀)而付出代价。
以某种方式打破 Sub2 对 Sub1 的依赖关系。根据存储库的架构,这可能不会发生。 Sub1 包含一些非常通用的共享库代码。 Sub2 包含两个非常独立的项目(客户端 SDK 和服务器实现)所需的 WCF 服务合同/接口/类型。目前,将这些存储库分开是有意义的。
也许我在想这个错误......或者也许我没有意识到一些 hg 技巧。
感谢任何帮助。
【问题讨论】: