安全与风控
用 git 历史做安全归属分析:识别敏感代码的孤儿文件…
当需要基于 git 历史对仓库做安全导向的归属/巴士因子分析(如敏感代码无人维护、安全维护者、CODEOWNERS 与实际风险对比)时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 git 历史做安全归属分析:识别敏感通用
解决思路
- 确定仓库范围与时间窗口,可选使用 --since/--until 限定。
- 确定敏感度规则:使用默认规则,或提供 CSV 配置(格式为 pattern,tag,weight,例如 **/auth/**,auth,1.0),通过 --sensitive-config path/to/sensitive.csv 传入。
- 用 scripts/run_ownership_map.py 构建归属图(共变更图默认开启;用 --cochange-max-files 忽略超大提交形成的超级节点)。
- 共变更图默认忽略常见“胶水”文件(lockfile、.github/*、编辑器配置),可用 --cochange-exclude 覆盖或 --no-default-cochange-excludes 关闭默认排除;Dependabot 提交默认排除,可用 --no-default-author-excludes 或 --author-exclude-regex 调整。
- 如需排除 Linux 构建胶水文件(如 Kbuild),传入 --cochange-exclude "**/Kbuild"。
- 默认排除作者身份、作者日期与合并提交;如需切换可用 --identity committer、--date-field committer 或 --include-merges。
- 社区检测默认开启,可用 --no-communities 关闭;如需 graphml 输出加 --graphml。
- 用 scripts/query_ownership.py 查询输出,返回有界的 JSON 切片,避免把整图加载进上下文。
- 运行常见安全查询:orphaned_sensitive_code(陈旧且低巴士因子)、hidden_owners(敏感标签的隐藏所有者)、bus_factor_hotspots(低巴士因子的敏感热点)。
- 按标签查询巴士因子 <= 1 的文件,例如 files --tag auth --bus-factor-max 1 或 --tag crypto --bus-factor-max 1。
- 查询谁最常触碰敏感代码:people --sort sensitive_touches --limit 10。
- 查询共变更邻居(归属漂移的聚类线索):cochange --file path/to/file --min-jaccard 0.05 --limit 20。
- 查询社区维护者:community --id 3;用 --community-top-owners 5(默认)控制每个社区存储的维护者数量。
- 用 scripts/community_maintainers.py 查询包含某文件的社区的按月维护者,例如 --file network/card.c --since 2025-01-01 --top 5;用 --bucket quarter 改为按季度分桶。
- 调整统计口径:--touch-mode file 按文件计数触碰(默认按一次提交计一次);--window-days 90 或 --weight recency --half-life-days 180 平滑 churn;--ignore-author-regex '(bot|dependabot)' 过滤机器人;--min-share 0.1 只显示稳定维护者。
- 输出产物位于 ownership-map-out/:people.csv、files.csv、edges.csv、cochange_edges.csv、summary.json、commits.jsonl(可选)、communities.json、cochange.graph.json、ownership.graphml/cochange.graphml(可选)。
- people.csv 含基于作者提交偏移的时区检测字段:primary_tz_offset、primary_tz_minutes、timezone_offsets。
- 需要把 CSV 导入 Neo4j 时参考 references/neo4j-import.md(含约束、导入 Cypher 与可视化建议)。
- 将 summary.json 与 CODEOWNERS 对比,突出归属漂移。
- 若 git log 过大,用 --since 或 --until 收窄范围。
适用边界 · 注意事项
- 用户只想要一般维护者列表或非安全导向的归属问题。
- 用户没有明确要求基于 git 历史做安全归属或巴士因子分析。