本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「git」コマンドのうち、Gitのリポジトリを作成する「git init」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はGitでリポジトリを作成する「git init」コマンドです。
「git」は「Git」という分散型バージョン管理システム用のコマンドです。Gitは元々Linuxカーネルのソースコードを管理するために作られた「バージョン管理システム」で、現在は多くのソフトウェアのソースコードやWebサイトのコード、ドキュメント管理などに用いられています。
ソースコードを管理する際、最新版だけを保存するやり方はうまくいきません。開発中のさまざまなタイミングで状態を管理し、必要に応じて比較、参照したり、元に戻したりできるようにする仕組みが「バージョン管理システム」です。
Gitでは、テスト版など複数に枝分かれした状態も管理できます。複数のメンバーによる開発を前提としており、開発中の各時点におけるコメントや、コメントへの返信なども管理できるようになっています。
gitコマンドはほとんどの場合、「サブコマンド」と組み合わせて利用します。今回紹介する「git init」は新しいリポジトリを作成するコマンドです(本連載ではgitとサブコマンドの組み合わせをコマンドとして紹介します)。
リポジトリ(repository)とは、ソースコードや変更履歴、コメントなどを一括して保管する場所です。リポジトリには、自分のPC上に作る「ローカルリポジトリ」と、「GitHub」などのWebサービス上に作る「リモートリポジトリ」があり、両者を連携させることで複数の開発者による開発を1本にまとめることができます。
既存のリポジトリ(リモートリポジトリ)にあるソースコードなどを入手したい場合は、まず、「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」コマンドでコミットしたいファイルを「インデックス」あるいは「ステージングエリア」と呼ばれる領域に追加します。インデックスにはファイルの変更箇所などが記録されます。
インデックスの内容は「git commit」コマンドでローカルリポジトリにコミットされ、「git push」コマンドでローカルリポジトリの内容をリモートリポジトリに反映します。従って、「git add」や「git commit」などを行わなければ、自分の環境で編集した内容がリポジトリに影響を与えることはありません。自由に編集し、テストできます。なお、ワークツリーのファイルを過去の任意のコミット状態に戻すことも可能です。
Gitには、この他、開発中のプログラムやドキュメントを、「テスト版」「○○版」……のように枝分かれさせたり、それらを合流させたりする機能もあります。枝分かれしたそれぞれのバージョンを「ブランチ」(branch)と呼び、ブランチを合流させることを「マージ」(merge)と呼びます。
git [オプション] サブコマンド [サブコマンドごとのオプションや引数]
git init [オプション] [ディレクトリ名]
※ [ ]は省略可能な引数を示しています。
短いオプション | 長いオプション | 意味 |
---|---|---|
-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ファイルのパスを表示する | |
コマンド | 実行内容 |
---|---|
clone | リポジトリのクローンを作成する |
init | リポジトリを新規作成する、または既存のリポジトリを初期化する |
remote | リモートリポジトリを関連付けする |
fetch | リモートリポジトリの内容を取得する |
pull | リモートリポジトリの内容を取得し、現在のブランチに取り込む(「fetch」と「merge」を行う) |
push | ローカルリポジトリの変更内容をリモートリポジトリに送信する |
add | ファイルをインデックスに追加する(コミットの対象にする) |
rm | ファイルをインデックスから削除する |
mv | ファイルやディレクトリの名前を変更する |
reset | ファイルをインデックスから削除し、特定のコミットの状態まで戻す |
status | ワークツリーにあるファイルの状態を表示する |
show | ファイルの内容やコミットの差分などを表示する |
diff | コミット同士やコミットと作業ツリーの内容を比較する |
commit | インデックスに追加した変更をリポジトリに記録する |
tag | コミットにタグを付ける、削除する、一覧表示する |
log | コミット時のログを表示する |
grep | リポジトリで管理されているファイルをパターン検索する |
branch | ブランチを作成、削除、一覧表示する |
checkout | 作業ツリーを異なるブランチに切り替える |
merge | 他のブランチやコミットの内容を現在のブランチに取り込む |
rebase | コミットを再適用する(ブランチの分岐点を変更したり、コミットの順番を入れ替えたりできる) |
config | 現在の設定を取得、変更する |
短いオプション | 長いオプション | 意味 |
---|---|---|
--bare | ワークツリーを持たないリポジトリ(ベアリポジトリ)を作成する(本文を参照) | |
--template=ディレクトリ名 | テンプレートディレクトリを指定する | |
--separate-git-dir=ディレクトリ名 | リポジトリ(「.git」ディレクトリ)を複製する場所を指定する(ワークディレクトリと別の場所にリポジトリを作成できる) | |
--shared | 共有リポジトリとして作成する(--shared=パーミッションで、作成するリポジトリのパーミッションを指定することも可能) | |
-q | --quiet | メッセージをなるべく表示しない |
パーミッション | 意味 |
---|---|
umask、false | umaskの値を使用(--sharedを指定しなかった場合のデフォルト。umaskが「0002」の場合、.gitディレクトリのパーミッションは「0775」となる) |
group、true | グループに対して書き込み可能にする(※2) |
all、world、everybody | グループは書き込み可能に、他のユーザーは読み込み可能にする(※2) |
0xxx | 4桁の数値でパーミッションを指定する(0640など、※2) |
※2 group、all、0xxxで明示的にグループに対する書き込み権限を指定した場合、SGID(“応用力”をつけるためのLinux再入門(11))も設定される。
「git init ディレクトリ名」で、指定したディレクトリに対するリポジトリを作成します。ディレクトリの指定を省略した場合、カレントディレクトリにリポジトリを作成します。
リポジトリは「.git」という名前のディレクトリとなり、その中に管理用のファイルを保存します。
git init ディレクトリ名
(指定したディレクトリに対するリポジトリを作成する)
git init project01
(project01用のディレクトリを作成する。project01ディレクトリの中に「.git」ディレクトリを生成する)
git init
(カレントディレクトリにリポジトリを作成する。カレントディレクトリに「.git」ディレクトリを生成する)
画面1では、「project01」というディレクトリを作成後、その中にリポジトリを作成しています。
この後、project01ディレクトリの中にファイルを作成し、作業のまとまりごとに「git add ファイル名」でファイルをインデックス(ステージングエリア)に追加して(連載第384回)、「git commit」でコミットします(連載第385回)。なお、現在のリポジトリの状態は「git status」で確認できます(次節で実際の様子を紹介)。
文書ファイルやプログラムのソースファイルなどが既にある場合は、ファイルを保存したディレクトリを対象にgitコマンドの操作が可能です。これらのディレクトリを作業ディレクトリ、つまりワークツリーとして、リポジトリを作成できます。
画面2では、Webサイト用のhtmlファイルなどを保存した「mypage」というディレクトリで、リポジトリを作成し、コミットするための準備をしています。
画面2にあるように、「git add ファイル名」で個別のファイルやディレクトリを指定したり、「.gitignore」という設定ファイルにデフォルトで対象外とするファイルを設定したりできます(連載第384回)。
画面2で作成したリポジトリに対して、画面3では全てのファイルをコミットしています。
Git管理をやめる場合など、リポジトリが不要になったときは、「.git」ディレクトリを削除します。管理ファイルだけが削除されて、現在のワークツリーのファイルはそのまま残ります(※3)。
※3 ワークツリーにないファイルは削除される。ローカルリポジトリで複数のブランチがある場合、必要なブランチをチェックアウトして、ワークツリーのファイルを別途保存してから削除することを勧める。
リポジトリを作成し直したい場合は、「.git」ディレクトリを削除してから、あらためて「git init」を実行します。
「git init --bare ディレクトリ名」で、ワークツリーのない、管理専用のリポジトリを作成できます(画面4)。このようなリポジトリを「ベアリポジトリ」と呼ぶことがあります。
ベアリポジトリは、主に複数のメンバーが参加するプロジェクトや、複数のPCから更新したい場合に使用します。
まず、それぞれの環境から共通してアクセスできる場所にベアリポジトリを作成して、リモートリポジトリとします。そして、それぞれの環境で「git clone」を実行し、必要に応じて同期できるようにします(※4)。
※4 先にローカルリポジトリだけで運用していた場合、リモート環境に「git clone --bare」で管理用のリポジトリを作成する。
ベアリポジトリでは、「.git」ディレクトリを生成しません。「--bare ディレクトリ名」で指定した場所がリポジトリになります。
git init --bare ディレクトリ名
(指定したディレクトリにベアリポジトリを作成する)
git init --bare project02
(project02にベアリポジトリを作成する。project02ディレクトリがリポジトリとなる)
git init --bare
(カレントディレクトリにベアリポジトリを作成する)
西村 めぐみ(にしむら めぐみ)
元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。
Copyright © ITmedia, Inc. All Rights Reserved.