svn外部引用需将sdk作为远程链接挂载而非复制代码,挂载点须为已提交目录,命令行用svn propset svn:externals并锁定版本号(如@4567),tortoisesvn中勾选“specify revision”,推荐集中放在trunk/libs下批量管理,ci中用svn info验证实际拉取版本。

要用 SVN 外部引用引入公共核心 SDK 模块,关键是把模块当作“远程链接”挂进项目,而不是复制代码。这样一处更新,所有引用项目自动同步,版本也容易统一控制。
选对挂载位置并提前提交目录
外部引用必须设在已纳入版本控制的目录上,不能直接挂在工作副本根目录或空文件夹里。比如你想把 SDK 放到 trunk/sdk 下,就得先确保这个 trunk/sdk 目录已存在、已提交过。
- 命令行操作:进入本地 trunk/sdk 目录,运行 svn propset svn:externals "core-sdk https://svn.company.com/libs/core-sdk@4567" .
- TortoiseSVN 操作:右键 → Properties → New → Externals → 填 Local path(如 core-sdk)和 URL(含 @4567 版本号)
- 设置完必须执行 svn commit,否则服务器不保存该配置,协作者也拉不到
务必锁定版本号,别用 HEAD
公共 SDK 是基础依赖,绝不能默认拉最新版(HEAD)。否则别人一提交,你的构建就可能失败。
- 写法示例:core-sdk https://svn.company.com/libs/core-sdk@4567 或 core-sdk -r4567 https://svn.company.com/libs/core-sdk
- TortoiseSVN 中勾选 “Specify revision”,手动输入数字,不要选 “Head revision”
- 如果是公司内部同一服务器上的模块,可用相对路径:core-sdk ^/libs/core-sdk@4567,迁移更方便
集中管理多个 SDK 引用
避免在不同子目录重复设 externals 属性——后设的会覆盖前设的。推荐统一放在 trunk/libs 或 trunk/third-party 这类专用目录下,用多行属性统一维护:
core-sdk https://svn.company.com/libs/core-sdk@4567 utils ^/shared/utils@1209 logger https://svn.company.com/third/logger@882
- 用 svn propset svn:externals -F externals.conf libs 批量导入
- 修改后执行 svn commit + svn update,两步缺一不可
- CI 脚本中加一句 svn info libs/core-sdk | grep Revision,验证实际拉取的是不是目标版本
验证与日常使用要点
设置完成后,不是一劳永逸,得确认它真正在起作用:
- 执行 svn propget svn:externals libs 查看当前配置是否正确
- 首次拉取或更新后,检查 libs/core-sdk 目录下的 .svn/entries 或运行 svn info,确认 Revision 字段匹配预期
- TortoiseSVN 更新时记得勾选 “Include externals”,图标带小箭头的才是 external 目录
- 若报 401 错误,大概率是两个仓库认证 realm 不同,需在客户端统一保存凭据











