AI Native 手册
坑库

跨仓链接用完整地址

指向 ops 仓的相对链接,换到 worktree、GitHub 网页或云端 agent 就全断,而且不报错

亲历组织阶段 · 运维更新于 2026-10-16
分享到 X
一句话规则

跨仓引用一律写完整 URL,并让园丁定期检查失效链接

发生了什么

我的一个组织用独立的 ops 仓放决策、剧本和复盘。代码仓的文档里有 10 处链接指向 ops 仓,写的是相对路径,形如 ../../<ops 仓>/...,前提是两个仓放在同一个父目录下。

在我自己的电脑上,这些链接一直好好的。直到我开始用 claude --worktree 并行开发:worktree 建在代码仓内部的 .claude/worktrees/<name>/ 下,同样的相对路径从那里往上数,落到了一个根本不存在的目录,10 处全部失效。接着又发现,在 GitHub 网页上点这些链接是 404;云端跑的 agent 只克隆了代码仓,同样打不开。

为什么会这样

相对链接偷偷依赖了“我这台电脑的目录布局”:两个仓必须并排、目录名不能变、读的人必须在本机。这三个条件,在 worktree、GitHub 网页、CI 和云端会话里一个都不成立。GitHub 只能解析仓库内部的相对路径,跳出仓库根目录就找不到。

更麻烦的是,这种失效没有任何报错。人点开是 404 还会察觉,agent 读不到链接内容时只是少了一块上下文,然后照样往下做。

怎么做

跨仓引用写完整 URL,指向分支或固定的 commit:

详见 [ADR-007](https://github.com/your-org/ops/blob/main/decisions/ADR-007_auth.md)

让 CI 拦住仓外的相对链接。CI 里只检出代码仓,lychee --offline 只检查本地文件链接,任何跳出仓库的相对链接都会因为目标不存在而报错:

# .github/workflows/links.yml 里的一个 step
- uses: lycheeverse/lychee-action@v2
  with:
    args: --offline --no-progress './**/*.md'

完整 URL 交给园丁定期查。私有仓的链接匿名访问是 404,用带权限的 gh api 逐条确认,累计所有失败,最后统一用退出码报告:

#!/usr/bin/env bash
# 检查文档里所有指向 ops 仓的完整 URL
fail=0
while read -r url; do
  url=${url%%#*}                       # 去掉页内锚点
  rest=${url#https://github.com/}      # your-org/ops/blob/main/decisions/ADR-007_auth.md
  repo=${rest%%/blob/*}                # your-org/ops
  ref=${rest#*/blob/}; path=${ref#*/}; ref=${ref%%/*}
  gh api "repos/$repo/contents/$path?ref=$ref" --silent \
    || { echo "失效:$url" >&2; fail=1; }
done < <(grep -rhoE 'https://github\.com/your-org/ops/blob/[^)[:space:]]+' docs/ | sort -u)
exit $fail

我把这一步放进每周的园丁任务里,和过期 review 日期一起查。试用中

agent 要读 ops 仓,显式接进来。代码仓的 CLAUDE.md 只写一句指针(ops 仓的完整地址);本机会话需要读写 ops 仓时,用 permissions.additionalDirectories 把它加进来,而不是靠相对路径碰运气。

相关

本页目录