目前我们使用 Source Safe 并开始迁移到 Subversion。所有外部 SDK(> 500 MB)现在都保存在 Source Safe 中,我正在寻找将它们从 VSS 移动到某个存储库的方法。
我们有 C++(大部分)、C#(很多)、Java(少数)项目。数百个项目。仅限 Windows 平台。
我有几个依赖管理器但不满意:
- NuGet - 对 .Net 很好,但对 C++ 来说很痛苦
- 常春藤 - 不深入,但似乎不能被 C++ 接受
第一个问题:我还能检查什么?它应该易于最终开发人员使用。最佳案例 - 在 IDE 中进行简单构建。
目前我倾向于下一个解决方案:
分配一些很少使用的驱动器,例如 S: 并将其声明为“DEV HOME”。
然后在这里放置外部:
S:\SDK\boost\1.30\...
S:\SDK\boost\1.45\...
S:\SDK\oracle\agile_9.0.0.0\...
S:\SDK\IBM\lotus_8.0\...
S:\SDK\IBM\lotus_9.0\...
S:\Tools\NuGet\nuget.exe
S:\Tools\clr\gacutil.exe
Autobuild 机器将保存此“DEV HOME”的主副本。每个开发人员都应该将必要的 SDK 从自动构建机器复制到本地并使用subst创建磁盘。
我找不到这个解决方案的大问题:
- 分支机构。不同分支的项目可以包含对不同版本SDK的引用(例如boost)
- 外部组件的版本不会变化太频繁,所以这里不会有数百个,比如说,boost 版本。
- 易于开发人员设置。
- 任何工具都支持的绝对路径。
- 如果您想使用不太大的 SSD 驱动器作为源,则磁盘空间没有问题。(目前我在符号链接的帮助下将我的外部设备移动到单独的驱动器。但对于其他开发人员来说,这看起来像黑魔法)
小问题:
- 就我个人而言,这不是美丽的解决方案。
- 磁盘 (S:) 可能正忙
- 不能在 Linux 中按原样使用(但目前我们对此不感兴趣)
第二个问题:这个解决方案有哪些麻烦?
更新 1:为什么不是相对路径。
- 外部是否应该与源根目录位于一个目录中?:
:
externals/...
branch-root-1.0/project_collection_1/project1/...
branch-root-2.0/project_collection_2/...
在这里,所有项目都应该在一个地方或重复的外部。似乎与具有绝对路径的解决方案没有太大区别。
- 外部应该与源根目录在同一个文件夹中?:
:
branch-root-1.0/externals/...
branch-root-1.0/project_collection_1/project1/...
branch-root-1.0/project_collection_2/...
branch-root-2.0/externals/...
然后外部将在每个签出的分支中重复。每个分支结帐 + 500MB + 一些额外的设置工作。
好吧,这看起来可以接受,但我看不出它比绝对路径更好。真的,我想知道相对路径的优点,因为我也对绝对路径感到不舒服。