跨平台 repo 用 symlink 維護「單一來源」(例如本 vault 的 .claude/skills 與 .codex/skills 同時指向 .agents/skills,讓 Claude Code 與 Codex 共用同一份 skill),Windows 上 clone 完常變成 17 bytes 文字檔,內容是字串 ../.agents/skills,驗證腳本直接 fail。每個指向同一目標的 symlink 都會踩到,要逐個還原。
兩層根因
- Git 層:
core.symlinks預設false,git 把 symlink 物件 checkout 成文字檔 - OS 層:Windows 預設不給非管理員建 symlink,即使 git 試了也 fallback 成文字檔
兩層都修才會生效。
修法
# 1. 全域開 git symlink(只影響之後 clone 的 repo)
git config --global core.symlinks true
# 2. 清掉 local 覆蓋(最容易漏;舊 repo 常留著 false)
git config --local --get core.symlinks # 先看
git config --local --unset core.symlinks # 清掉讓 global 生效3. 開 Windows 開發者模式(OS 層權限放行,GUI 設定)
- Win10:設定 → 更新與安全性 → 開發人員專用 → 開啟「開發人員模式」
- Win11:設定 → 隱私權與安全性 → 開發人員 → 開啟「開發人員模式」
不需重啟,但 shell session 要重開。
# 4. 還原已 checkout 成文字檔的假 symlink(每個都要做)
rm .claude/skills && git checkout -- .claude/skills
rm .codex/skills && git checkout -- .codex/skills驗證(每個 symlink 都要檢查):
ls -la .claude/skills .codex/skills
# 兩個都應為 lrwxrwxrwx ... -> ../.agents/skills坑
- PowerShell
New-Item -ItemType SymbolicLink不吃開發者模式(Windows PowerShell 5.1 實測;7+ 行為可能不同)——堅持要管理員。手建 symlink 用cmd /c mklink /D,或讓 git checkout 自己處理 git config --global不溯及既往——舊 repo 必須手動rm+git checkout --才會修復,這是步驟 4 必要的原因- Symlink 沒生效時第一步:
git config --local --get core.symlinks,幾乎都是 local 沒清