PAYATHON 2026

数据分析团队如何在 Azure DevOps 中组织 monorepo?

数据小陈

结论:可以采用共享 monorepo,先明确资源边界

数据分析团队可以把 SQL、ETL、报表定义和相关代码放在一个 Git 仓库中。monorepo 不要求所有文件属于同一个大型应用,不同工单之间也不必存在代码依赖。

考虑到你们目前有内部限制,且倾向使用共享仓库,可以先采用这一方案。前提是仓库内的资源适合共享访问,并且能明确每项资源的负责人、验证方式和发布范围。现有材料没有提供其他团队的实施结果,无法保证规模扩大后仍然顺畅。

多人协作的压力主要来自共享文件和流程

Git 分支属于整个仓库,但合并冲突通常取决于双方具体修改的内容。两个人分别修改不同目录下的独立 SQL 文件,通常不会仅因为共用仓库而产生内容冲突。

以下情况更容易带来协作困难:

  • 多个工单频繁修改同一个 SQL 文件、公共配置或共享 ETL 模块。
  • 分支长期不合并,积累大量变更。
  • 一次提交混入多个无关需求,增加审查和回退难度。
  • 任意目录发生变更,都触发全部资源的验证和部署。
  • 自动生成文件或 notebook 元数据反复变化,掩盖实际逻辑修改。

判断是否需要拆分仓库,应结合这些问题,而不能只看参与人数。

目录应围绕长期维护的资源组织

原始目录示例没有缩进,无法确定准确的父子关系。另外,Fabric 和 Oracle 更接近平台划分;如果团队希望按业务领域组织,需要进一步明确哪一种作为顶层规则。

如果日常维护主要按平台分工,可以参考下面的结构。这个层级是建议,原始示例并未明确这些关系:

Data-and-Analytics-Projects/
├── README.md
├── .gitignore
├── Fabric/
│   ├── etl/
│   │   └── monthly_arrears_query/
│   │       ├── monthly_arrears_query.sql
│   │       └── README.md
│   ├── notebooks/
│   ├── api/
│   └── sql/
└── Oracle/
    └── ccs/
        ├── severance_update/
        │   ├── severance_update.sql
        │   └── README.md
        └── test_dim_sa/
            ├── test_dim_sa.sql
            └── README.md

如果需求通常跨平台,但围绕同一个业务领域交付,也可以先按业务领域分目录,再区分平台。选择团队最容易定位资源的方式即可,同时避免同类资源在多个位置重复存放。

工单编号适合放在分支名、提交说明和 PR 中。长期维护的资源目录应保持稳定,避免每处理一个工单就复制一套脚本。

每项资源的 README.md 至少应写清用途、负责人、输入输出、依赖、运行方法和验证方法。会修改数据的脚本还应说明适用环境、执行顺序和恢复办法。

用短分支和小 PR 处理独立工单

可以为单个需求创建短期分支,让每个 PR 聚焦一项可独立审查的变更。例如:

git switch main
git pull --ff-only
git switch -c work/1234-monthly-arrears

# 修改并检查相关文件后,仅暂存本次需求涉及的内容
 git add Fabric/etl/monthly_arrears_query/
git commit -m "Update monthly arrears query"
git push -u origin work/1234-monthly-arrears

示例假设默认分支名为 main,本地工作区没有待处理的修改。分支名和路径应按实际情况替换。

提交后通过 PR 审查,重点检查逻辑、依赖变化和验证证据。不要把某个工单的分支长期用作该资源的维护分支,否则后续修改容易分散在不同分支中。

按资源范围验证和发布

共享仓库可以包含多个独立的验证和发布单元。例如,只修改一个 Oracle SQL 资源时,可以先验证该资源及其依赖,不必因此部署所有 Fabric 内容。

如果后续配置按路径触发的流水线,需要把共享模块和公共配置纳入依赖判断。只根据修改文件所在目录确定验证范围,可能漏掉受影响的下游资源。

SQL 通过语法检查不代表业务结果正确。还需要结合目标数据库、输入数据和预期结果进行验证;涉及数据写入时,先在合适的测试环境中确认影响范围。具体检查方式取决于你们使用的数据库和运行工具。

哪些情况值得拆成多个仓库?

出现以下情况时,应重新评估仓库边界:

  • 不同团队需要严格隔离代码读取权限。Git 目录不能作为可靠的读取权限隔离边界。
  • 各部分有独立的维护团队和发布流程,共享仓库持续增加协调成本。
  • 大文件或生成文件使仓库历史不断膨胀,影响日常获取和维护代码。
  • 公共配置经常引发跨团队冲突,而且难以通过调整目录和流程解决。

报表导出文件也需要区分用途:生成报表的代码、定义和少量脱敏样例适合版本管理;大量运行结果通常更适合独立的数据或制品存储。连接密码、访问令牌和敏感业务数据不应提交到仓库。

可以先选一组实际资源,走一遍分支、审查、验证和发布流程,再根据遇到的具体问题调整目录或拆分仓库。

备注:内容仅供参考。