我正在将我们的旧 C/C++ 代码库迁移到 Mercurial。我有点不清楚存储库结构的最佳(或至少接近最佳)应该是什么样子,因为我发现的示例是针对 .NET 或 Java 的。我的问题主要是关于处理VC++ 目录,在我之前我们就一直在使用它。
currently, on disk:
\DEV
\include
\source
\lib
\static-link1.lib
\static-link2.lib
\static-link3.lib
...
\projects
\projA
\projB
\projC
...
\lib1-src
\lib2-src
\lib3-src
...
以下是我可以看到我们无需做太多思考就可以做到这一点,但我可以预见在链接期间会出现一些版本控制/依赖性问题(链接到旧的 .lib)。\source
,\include
并且\static-libs
在本例中是旧的全局VC++ 目录在签出时。
mercurial (alternative #1):
\repo: include
\repo: source
\repo: lib1-src
\repo: lib2-src
\repo: lib3-src
...
\repo: static-libs
\static-link1.lib
\static-link2.lib
\static-link3.lib
...
\repo: projA-prod
\repo: projA-dev
\repo: projB-prod
\repo: projB-dev
\repo: projC-prod
\repo: projC-dev
...
进入备选方案#2。这会更好吗?如果我唯一想做的就是使用新版本的 lib 对某个项目进行新的生产构建,我是否可以进入子存储库并仅对子存储库进行拉取/更新/合并?这种替代方案实际上删除了全局\lib
目录并改为按项目创建,希望它更灵活一点。另一方面,签入已编译的库会感觉非常错误。
mercurial (alternative #2):
\repo: include
\repo: source
\repo: static-libs (only for subrepos)
\repo: projA-prod
\subrepo: static-libs
\repo: projA-dev
\subrepo: static-libs
\repo: projB-prod
\subrepo: static-libs
\repo: projB-dev
\subrepo: static-libs
\repo: projC-prod
\subrepo: static-libs
\repo: projC-dev
\subrepo: static-libs
...
\repo: lib1-src
\repo: lib2-src
\repo: lib3-src
...
还有其他想法吗?你怎么做呢?在过去的 4 年中主要使用 .NET 工作,我不再那么喜欢这些全局\source
/\include
文件夹,但我不明白我们如何才能完全摆脱它们。绝对应该可以稍微削减源代码或将一些代码移动到库中,从而最大限度地减少那些 .h/.cpp 文件中的项目间依赖关系,但仍然需要存在一些简单的代码重用。
附加问题:我可以看到\include
甚至\source
在 SAME 存储库中,因为它们几乎是同步的,你是这样做的吗?