Help us understand the problem. What is going on with this article?

[Git] リモートリポジトリのパスの書き方一覧

More than 3 years have passed since last update.
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 ×}$

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away