git remote コマンド:追加、リスト、削除、名前の変更 url、プロトコル
この記事では、git remote
コマンドを使ってリモートリポジトリを追加・表示・削除したり、名前やURLを変更したりする方法を説明します。git はそれ単体でもすばらしいものですが、複数の人と一緒に使うことでその真価を発揮します。まずは git remote コマンドを見てみましょう。
1. git remote add: 新しいリモートリポジトリを追加/登録/接続する
最初に git init コマンド を使ってローカルリポジトリを作成したときには、リモートリポジトリは何も接続されていません。接続されているすべてのリモートリポジトリの一覧を表示する以下のコマンドを実行しても、何も出力されません。
$ git remote
ローカル環境のソースコードを他のチームメンバーと共有するには、リモートリポジトリに接続する必要があります。リモートリポジトリは、自分で設定したサーバーでも、GithubやBitbucketのようなサービスを利用することもできます。
いずれにせよ、また使用する通信プロトコルにかかわらず、リモートリポジトリのアドレスは .git
で終わります。そのアドレスを以下のコマンドで使用して、新しいリモートリポジトリを追加します。
メインリポジトリとして使用する場合は、origin
という名前のリモートリポジトリを追加するのが一般的です。
そこで、次のコマンドを入力します。
$ git remote add origin [url]
これが実際の実行結果です。
git remote add
コマンドは何も出力せずに終了します。コマンドを入力した後で git remote
コマンドで確認すると、リストに origin
という名前が表示されます。
add
コマンドでよく使われるオプションに -f
があります。このオプションは、リモートリポジトリを追加した後に、新しく追加したリポジトリのすべてのブランチから自動的にデータを取得します。
もし remote origin already exists
というエラーメッセージが表示された場合は、すでに origin
という名前のリモートリポジトリが存在していることを意味します。以下のセクションでその方法を説明します。
2. git remote -v: リモートリポジトリの名前と URL をチェックする
git remote
コマンドには -v (--verbose)
オプションがあります。このオプションを使うと、接続しているリモートリポジトリの一覧でより詳細な情報を表示することができます。
$ git remote -v
別のリモートリポジトリを追加した後のコマンドはこのようになります。
リスト内の名前と一緒に、URL も表示されています。同じ名前が fetch
と push
の両方で 2 回出力されていることがわかります。これは、2 つの用途で使用する URL が異なる可能性があることを意味します。
異なるアドレスを使用する主な理由は、特定のレポを読み込み専用にする、プッシュアドレスをブロックする、異なる通信プロトコルを使用する、などです。
それぞれのアドレスを別々に設定する方法は、後述の セクション 5 で説明します。
git remote remove: リモートリポジトリを削除する
ここでは、設定したリモートリポジトリへの接続を削除する方法を説明します。以下のコマンドを実行するだけです。
$ git remote remove [name]
または
$ git remote rm [name]
リモートリポジトリを削除すると、それに関連するすべてのブランチと設定も削除されます。実行画面は次のようになります。
4. git remote rename: リモートリポジトリの名前を変更する
次に、リモートリポジトリにつけた名前を変更します。次のコマンドを実行すれば変更できます。
$ git remote rename [old_name] [new_name]
リモートリポジトリの名前を変更すると、それに関連するすべてのブランチと設定も更新されます。実行画面を見てみましょう。
origin
という名前がonion
に変更されています。
git remote set-url: リモートリポジトリのURLを変更する [#5].
ここでは、特定の名前に設定されている URL を変更するコマンドを紹介します。以下のコマンドを使います。
$ git remote set-url [name] [new_url]
このコマンドはデフォルトでは fetch
と push
の両方のアドレスを変更するが、--push
オプションを指定すると、push URL のみを変更できる。
$ git remote set-url --push [name] [new_push_url]
一度PUSH URLを変更すると、--PUSH
オプションのないコマンドはFETCH URLアドレスのみを変更する。実行結果をチェックして、URLアドレスがどのように変更されたかを確認しましょう。
6. リモートリポジトリで使用する 4 つのプロトコルの紹介
Git は、リモートリポジトリと通信するためのさまざまなプロトコルをサポートしています。そのうちの4つを見てみましょう。
6.1. ローカル
git リポジトリが同じシステム上にある場合は、ファイルシステムを通じてアクセスすることができます。これは主にテストやローカルバックアップに便利です。
アドレスの例は次のようになります。
$ git remote add local_repo file:///path/to/local/repo.git
6.2. HTTP/HTTPS
HTTP(S)はGitホスティングサービスでよく使われる通信プロトコルです。 また、ファイアウォールやプロキシなどの設定とも相性がよく、特にHTTPSの場合は暗号化によってデータの安全性を確保できるという利点もあります。
アドレスの例は次のようになります。
$ git remote add remote_repo https://example.com/user/repo.git
6.3. SSH
SSHも人気のある通信プロトコルです。公開鍵/秘密鍵の暗号化をサポートしており、HTTP(S)よりも高速だからです。 Gitで初めてこれを設定するのはHTTP(S)よりも複雑ですが、大規模なリポジトリではパフォーマンス上の利点があります。そのため、ほとんどのGitホスティングサービスでサポートされています。
アドレスの例は次のようになります。
$ git remote add remote_repo ssh://user@example.com:/path/to/repo.git
6.4 Git
Git supports its own Git protocol over TCP. This protocol does not require user authentication or encryption, so it is often used for read-only implementations in most open source projects, including Git.
An example address might look like this
$ git remote add remote_repo git://user@example.com:/path/to/repo.git
7. おわりに
この記事では、Git を使うための出発点である git remote
コマンドについて知っておくべきことをほぼすべて説明しました。git remote
コマンドは、最終的にはローカルの Git 環境に関連するすべてのリモートリポジトリを管理します、
このコマンドは、git clone、git branch、git push
、git pullなどのリモートリポジトリに関連するほとんどのコマンドと組み合わせて使用します。
リモートレポジトリの管理は、特にプロジェクトが大きくなって細部にまで気を配る必要が出てきたときには慎重に行う必要があります。 この記事が、リモートリポジトリを管理するための良いきっかけになれば幸いです。
