検索
連載
Linux基本コマンドTips(395):

【 git remote 】コマンド(基礎編)――リモートリポジトリを追加、削除する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はGitのリモートリポジトリを追加、削除する「git remote」コマンドです。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はGitのリモートリポジトリを追加、削除する「git remote」コマンドです。

git/git remoteコマンドとは?

 「git」は「Git」という分散型バージョン管理システム用のコマンドです。Gitは元々Linuxカーネルのソースコードを管理するために作られた「バージョン管理システム」で、現在は多くのソフトウェアやWebサイトのソースコード、ドキュメントの管理などに用いられています。

 ソースコードを管理する際、最新版だけを保存するやり方はうまくいきません。開発中のさまざまなタイミングで状態を管理し、必要に応じて比較、参照したり、元に戻したりできるようにする仕組みが「バージョン管理システム」です。

 Gitでは、テスト版など複数に枝分かれした状態も管理できます。複数のメンバーによる開発を前提としており、開発中の各時点におけるコメントや、コメントへの返信なども管理できるようになっています。

gitのサブコマンドとGitの仕組み

 gitコマンドはほとんどの場合、「サブコマンド」と組み合わせて利用します(本連載ではgitとサブコマンドの組み合わせをコマンドとして紹介します)。

 gitコマンドでは「リポジトリ(repository)」を使ってバージョンを管理します。リポジトリにはソースコードや変更履歴、コメントなどを一括して保管します。リポジトリには、自分のPC上に作る「ローカルリポジトリ」と、「GitHub」などのWebサービス上に作る「リモートリポジトリ」があり、両者を連携させることで複数の開発者による開発を1本にまとめることができます。

 ローカルリポジトリのみで運用することも可能です。そのような運用をしているリポジトリにリモートリポジトリを追加したり、逆に、リモートリポジトリを削除したりするには、「git remote」コマンドを使用します。「git remote」コマンドには、さらに「add」や「remove」などのサブコマンドがあります。

 既存のリポジトリ(リモートリポジトリ)にあるソースコードなどを入手したい場合は、まず、「git clone」(連載第381回)でリポジトリを自分の環境に複製します(※1)。リモートリポジトリの内容がバージョンアップされたら「git pull」(連載第382回)コマンドで最新版を取得します。開発に参加するのではなく、単に最新版を取得したいという場合は、「git clone」と「git pull」を利用すればよいでしょう。

※1 特定のファイルだけが欲しい場合、例えばGitHub(github.com)にあるリポジトリであれば「Raw」というボタンで表示されるURLを使い、「wget」コマンドなどを使ってダウンロードできる。この他、プロジェクト全体をダウンロードするためのリンクも用意されている([Clone or download]ボタン→「Download ZIP」)。



 保管場所であるリポジトリに対し、ファイルの編集などを行う場所を「ワークツリー」「ワーキングエリア」「作業ツリー」などと呼びます。「git clone」や「git pull」で取得した最新版のファイルはワークツリーに配置されます。つまり「作業ディレクトリ」です。

 ワークツリーで編集した結果をリポジトリに反映する操作を「コミット」と呼びます。「git add」(連載第384回)コマンドでコミットしたいファイルを「インデックス」あるいは「ステージングエリア」と呼ばれる領域に追加します。インデックスにはファイルの変更箇所などが記録されます。

 インデックスの内容は「git commit」コマンドでローカルリポジトリにコミットされ、「git push」コマンドでローカルリポジトリの内容をリモートリポジトリに反映します。従って、「git add」や「git commit」などを行わなければ、自分の環境で編集した内容がリポジトリに影響を与えることはありません。自由に編集し、テストできます。なお、ワークツリーのファイルを過去の任意のコミット状態に戻すことも可能です。

 Gitには、この他、開発中のソースコードやドキュメントを、「テスト版」「○○版」……のように枝分かれさせたり、それらを合流させたりする機能もあります。枝分かれしたそれぞれのバージョンを「ブランチ」(branch)と呼び、ブランチを合流させることを「マージ」(merge)と呼びます。

 コミットには「タグ」と呼ばれる名前を付けることができます。その際には「git tag」コマンドを使います。



コマンドの書式

git [オプション] サブコマンド [サブコマンドごとのオプションや引数]

git remote -v

git remote add [オプション] 名前 URL

git remote remove 名前

git remote サブコマンド 対象

※ 「名前」欄ではリモートに対して付けるものを指定する。通常は「origin」とする。「対象」にはファイル名やブランチ、タグ、コミットのハッシュ値などが指定可能。[ ]は省略可能な引数を示しています。




gitの主なオプション

短いオプション 長いオプション 意味
-C パス カレントディレクトリではなく指定したディレクトリで実行したものとする
--bare リポジトリを「bareリポジトリ」(ワーキングツリーが存在しない、管理だけを目的としたリポジトリ)として扱う
-c 設定=値 設定値を指定する(設定は「git config」で確認可能)
-p --paginate 全ての出力を「less」コマンドまたは環境変数PAGERで指定されたコマンドで表示する
-P --no-pager 「less」コマンドで表示しない(「-p」の指定を打ち消す)
--exec-path=パス gitの実行ファイルのパスを指定する(「--exec-path」のみの場合、実行ファイルのパスを表示する)
--html-path gitのHTML形式のドキュメントがインストールされたパスを表示する
--man-path gitのmanファイルのパスを表示する
--info-path gitのinfoファイルのパスを表示する

gitのサブコマンド

コマンド 実行内容
clone リポジトリのクローンを作成する
init リポジトリを新規作成する、または既存のリポジトリを初期化する
remote リモートリポジトリを関連付けする
fetch リモートリポジトリの内容を取得する
pull リモートリポジトリの内容を取得し、現在のブランチに取り込む(「fetch」と「merge」を行う)
push ローカルリポジトリの変更内容をリモートリポジトリに送信する
add ファイルをインデックスに追加する(コミットの対象にする)
rm ファイルをインデックスから削除する
mv ファイルやディレクトリの名前を変更する
reset ファイルをインデックスから削除し、特定のコミットの状態まで戻す
status ワークツリーにあるファイルの状態を表示する
show ファイルの内容やコミットの差分などを表示する
diff コミット同士やコミットとワークツリーの内容を比較する
commit インデックスに追加した変更をリポジトリに記録する
tag コミットにタグを付ける、削除する、一覧表示する
log コミット時のログを表示する
grep リポジトリで管理されているファイルをパターン検索する
branch ブランチを作成、削除、一覧表示する
checkout ワークツリーを異なるブランチに切り替える
merge 他のブランチやコミットの内容を現在のブランチに取り込む
rebase コミットを再適用する(ブランチの分岐点を変更したり、コミットの順番を入れ替えたりできる)
config 現在の設定を取得、変更する

git remoteの主なサブコマンド

サブコマンド 対象 意味
add 名前 URL 現在のローカルリポジトリにリモートのリポジトリを追加する(※2)
remove 名前 現在のリポジトリからリモートのリポジトリを削除する
rm 名前 removeと同じ(本文を参照
rename 名前 新しい名前 リモートの名前を変更する
set-url 名前 URL リモートのURLを変更する(「--add」で追加、「--delete」で削除)
get-url 名前 リモートのURLを表示する
set-head 名前 リモートのデフォルトブランチを設定する
set-branches 名前 ブランチ リモートで追跡するブランチを変更する(ブランチは複数指定可能、変更ではなく追加したい場合は「--add ブランチ名」とする)
prune 名前 リモートの追跡ブランチを削除する(「-n」または「--dry-run」オプションを付けると実行せずに、実行する内容だけを表示する)
show 名前 リモートの情報を詳しく表示する

※2 「名前」はリモートリポジトリに付けるもので、通常は「origin」を使用する(本文を参照)。



git remote addの主なオプション

オプション 意味
-t ブランチ 変更を取得するブランチを指定する(デフォルトはmaster、複数を指定可能)
-m ブランチ HEAD(先頭)に設定するブランチを指定する
--tags 全てのタグを取得する(※3)
--no-tags タグを取得しない(※3)
--mirror=fetch リモートリポジトリからの取得(fetchやpull)時に、全てのブランチやタグを取得する
--mirror=push リモートリポジトリへの送信(push)時に、全てのブランチやタグを送信する
-f リポジトリを追加した後、リモートリポジトリの変更内容を取得(fetch)する

※3 デフォルトでは、リモートブランチに関連するタグのみを取得する。





リモートリポジトリを表示する

 「git remote」を実行するとリモートリポジトリの名前を表示します。デフォルトの名前は「origin」です(画面1)。「git clone」で作成したリポジトリの場合、多くの場合「origin」という名前を表示するでしょう。

 「git remote -v」でリモートリポジトリの名前と場所(URL)を表示します。取得用の場所(fetch)と送信用の場所の場所(push)をそれぞれ表示しますが、通常は同じ場所を使用します。

 「git remote show 名前」では、さらに詳しい情報を表示できます。「git remote」で得た名前(通常は「origin」)を指定します。

コマンド実行例

git remote

(リモートリポジトリの名前を表示する)

git remote -v

(リモートリポジトリの名前と場所《URL》)を表示する)

git remote show 名前

(指定したリモートリポジトリの詳しい情報を表示する)


 画面1では、前回に引き続き「progit2-ja」を使用しています。「git clone https://github.com/progit/progit2-ja」で自分の環境に複製を作り(連載第381回)、ワークツリーであるprogit2-jaディレクトリの中で実行しています。

画面1
画面1 リモートリポジトリを表示したところ


リモートリポジトリを追加する

 「git remote add origin リモートリポジトリの場所」で、現在のローカルリポジトリに指定したリモートリポジトリを追加します。「origin」はデフォルトで使われる名前です(別の名前を指定可能)。

 リモートリポジトリの場所を指定するには、ディレクトリ名を使うか、GitHubなどのWebサービスの場合は「https://github.com/ユーザー名/リポジトリ名」のようなURLを使います。いずれの場合も、既に存在するリポジトリを指定する必要があります。

コマンド実行例

git remote add origin https://github.comユーザー名/リポジトリ名

(現在のローカルリポジトリに、「origin」という名前で、https://github……という場所《URL》をリモートリポジトリとして追加する)(画面2

git remote add origin /mnt/server/work/project01

(現在のローカルリポジトリに、「origin」という名前で、/mnt/server……という場所《ディレクトリ》をリモートリポジトリとして追加する、連載第396回)


 画面2では、ローカルリポジトリのみで運用していた「myproj」に、リモートリポジトリ(GitHub)を追加しています。画面2の実行前にGitHubのユーザー登録を終え、「myproj」という非公開のリポジトリ(プライベートリポジトリ)を作成しています(※4)。

※4 GitHubのユーザー登録後、ログインして「Repositories」を選択。「New」をクリックしてリポジトリ名を入力し、「Private」を選択して「Create repository」をクリックした。



 動作を分かりやすくするためにユーザー名の入力などを行っていますが、実際にはGitHubに公開鍵を登録することでユーザー名とパスワードの入力を省略できます。

 画面2ではまず、現在の状況を確認するため「git log --oneline」(連載第386回)でコミットのログを表示しています。2件のコミットがあることが分かります。

 次に、「git remote -v」でリモートリポジトリを表示しています。このリポジトリはローカルのみで運用しており、現時点ではリモートリポジトリを設定していないため、何も表示しませんでした。

 次に「git remote add」を実行して、リモートリポジトリを「origin」という名前で追加しています。

 追加後に「git push --set-upstream origin master」で、ローカルリポジトリの内容(masterブランチ)をリモートリポジトリにプッシュしています。リモートリポジトリを“上流”(upstream branch)とする、という設定です。一度このように実行することで、今後はこのリモートリポジトリ(origin)のmasterブランチに対して「git push」や「git pull」を実行できるようになります。

 git push後、あらためて「git log --oneline」を確認すると、masterブランチの先頭(HEAD)が、リモートリポジトリ(赤字のorigin/master)と同期されている様子が分かります。

画面2
画面2 リモートリポジトリを追加したところ


リモートリポジトリを削除する

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る