git clone 'ここの書き方を毎回忘れる'
ので整理しておく。
リモートリポジトリのパスの書き方は大きく以下の6種類に分かれる。
- Localプロトコル(1)
- Localプロトコル(2)
- HTTP(S)プロトコル
- SSHプロトコル(1)
- SSHプロトコル(2)
- Gitプロトコル
Localプロトコル(1)
記法
- 例:
/path/to/repo.git/
- 絶対パスのみ指定可能(~展開無し)
- (NFSを含む)ファイルシステムからアクセスできるリポジトリのみ指定可能
特徴
- Gitはハードリンクを行うか必要に応じて直接ファイルをコピーする(ので高速)
Localプロトコル(2)
記法
- 例:
file:///path/to/repo.git/
- 絶対パスのみ指定可能(~展開無し)
- (NFSを含む)ファイルシステムからアクセスできるリポジトリのみ指定可能
特徴
- Gitはわざわざネットワーク越しにファイルを転送する(ので低速)
- 他のバージョン管理システムからインポートしたときなどに現れる、関係のない参照やオブジェクトを除いた、クリーンなコピーが欲しいときに使う
HTTP(S)プロトコル
記法
- 例:
http[s]://example.com[:443]/path/to/repo.git/
- ポート番号指定可能
特徴
- GitはHTTP(S)を使ってファイルを転送する
- HTTP(S)の認証機構を利用することもしないこともできる
- 匿名のpullが可能
- 認証を行った上でのpushが可能
- HTTPSならば通信の暗号化が可能
- Gitが最も推奨しているプロトコル
SSHプロトコル(1)
記法
- 例:
ssh://[user@]example.com[:22]/~/path/to/repo.git/
- 絶対パスのみ指定可能(~展開あり)
- ポート番号指定可能
特徴
- GitはSSHを使ってファイルを転送する
- SSHの認証機構を必ず利用する
- 匿名のpullが不可能
- 認証を行った上でのpushが可能
- 通信の暗号化が可能
SSHプロトコル(2)
記法
- 例1:
[user@]example.com:path/to/repo.git/
- 例2:
[user@]example.com:/~/path/to/repo.git/
- ホームディレクトリからの相対パスも絶対パスも指定可能(~展開あり)
- ポート番号指定不可能
特徴
記法を除いてSSHプロトコル(1)と全く同じ
Gitプロトコル
記法
- 例:
git://example.com[:9418]/~/path/to/repo.git/
- 絶対パスのみ指定可能(~展開あり)
- ポート番号指定可能
特徴
- GitはデフォルトではTCP/9418を用いる独自プロトコルでファイルを転送する
- リモートリポジトリ側はGitデーモンを動かした上でプロジェクトごとにgit-export-daemon-okというファイルを作る必要がある
- 認証機構が無いので実質read-only
- 匿名のpullが可能
- 認証を行った上でのpushが不可能
- 通信の暗号化が不可能
まとめ
Local | HTTP | HTTPS | SSH(1) | SSH(2) | Git | |
---|---|---|---|---|---|---|
リモートアクセス | $\color{lightgreen}{\rm △}$(要NFS) | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ |
絶対パス | $\color{blue}{\rm ○}$ | N/A | N/A | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ |
ホームディレクトリからの相対パス | $\color{red}{\rm ×}$ | N/A | N/A | $\color{red}{\rm ×}$ | $\color{blue}{\rm ○}$ | $\color{red}{\rm ×}$ |
~展開 | $\color{red}{\rm ×}$ | N/A | N/A | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ |
ポート番号指定 | N/A | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{red}{\rm ×}$ | $\color{blue}{\rm ○}$ |
匿名のpull | N/A | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{red}{\rm ×}$ | $\color{red}{\rm ×}$ | $\color{blue}{\rm ○}$ |
認証済のpush | N/A | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{red}{\rm ×}$ |
通信の暗号化 | N/A | $\color{red}{\rm ×}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{blue}{\rm ○}$ | $\color{red}{\rm ×}$ |