よくある事故
同一ホスト表記のまま切り替えるとfetchが別権限で走ります。helper一本だとトークン混線します。SSHかHTTPSかを揃え、パス単位かHostエイリアスで分けます。作業ツリーはワークツリー並行マトリクスと揃えます。
対照表(SSH証明書・HTTPS・キーチェーン・並行)
小チームではSSH=Hostエイリアス+鍵/証明書、HTTPS=useHttpPath+includeIfが説明しやすいです。
| 項目 | SSH | HTTPS | キーチェーン | 並行 |
|---|---|---|---|---|
| 分アカウント | Host 別に鍵固定 |
includeIf+パス単位 |
ユーザ/チェーン分離 | fetch並列に上限 |
| ローテ | CA期限・ssh-add -l |
PAT期限・スコープ | 更新後にerase |
メンテ枠で並行抑制 |
| 典型失敗 | 同一Hostで鍵上書き | トークン混線 | GUI/CIで競合 | 初回cloneは直列 |
| 最小権限 | Deploy key等をrepo単位 | fine-grained優先 | 読取ジョブは狭い権限 | 書込はレーン分離 |
設定と検証
1) HTTPS — グローバル ~/.gitconfig:
[credential]
helper = osxkeychain
useHttpPath = true
組織別は ~/.gitconfig-corpA を includeIf で読み分けます。
[includeIf "gitdir:~/build/corp-a/"]
path = ~/.gitconfig-corp-a
2) SSH — アカウント固定:
Host github.com-corp-a
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_corp_a
IdentitiesOnly yes
URLはgit@github.com-corp-a:…に統一。検証:GIT_TERMINAL_PROMPT=0 git ls-remote/HTTPSはerase後、SSHはssh -T。
最小権限の検収
- スコープ:読み取りジョブに不要な書き込み権が付いていない。
- 期限:PAT/証明書の更新日がカレンダーにあり、期限前に再発行できる。
- 経路:同一repoでHTTPSとSSHが混在せず、
remote -vが意図どおり。 - 並行:キーチェーン飽和時はfetch並列かSSH寄せの方針がある。
- 失効:鍵・トークンの所有者と失効手順が一覧化されている。
FAQ
Q. 複数組織のPATを混ぜたくない。
A. useHttpPath+includeIf。必要ならユーザ分離。
Q. 並行fetchで詰まる。
A. 並列数を下げるかSSHへ寄せる。
Q. PAT更新直後に403。
A. erase後にls-remote。スコープも確認。
まとめと購入
共有Mac · 認証と協働
分アカウントと轮换は、設定より「名前空間」が先
HTTPS・SSH・キーチェーンの境界を揃えたうえで、協働向けプランでノードと運用幅を拡張できます。
共有Mac
credential
ローテ
協働