【 git init 】コマンド――Gitのリポジトリを作成するLinux基本コマンドTips(383)

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

» 2020年03月12日 05時00分 公開
[西村めぐみ@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

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

git/git initコマンドとは?

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

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

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

gitのサブコマンドと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 [オプション] [ディレクトリ名]

※ [ ]は省略可能な引数を示しています。




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 initの主なオプション

短いオプション 長いオプション 意味
--bare ワークツリーを持たないリポジトリ(ベアリポジトリ)を作成する(本文を参照
--template=ディレクトリ名 テンプレートディレクトリを指定する
--separate-git-dir=ディレクトリ名 リポジトリ(「.git」ディレクトリ)を複製する場所を指定する(ワークディレクトリと別の場所にリポジトリを作成できる)
--shared 共有リポジトリとして作成する(--shared=パーミッションで、作成するリポジトリのパーミッションを指定することも可能)
-q --quiet メッセージをなるべく表示しない

「--shared」で指定できるリポジトリのパーミッション

パーミッション 意味
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」で確認できます(次節で実際の様子を紹介)。

画面1 画面1 新しいディレクトリにリポジトリを作成したところ


既存のディレクトリをGitで管理する

 文書ファイルやプログラムのソースファイルなどが既にある場合は、ファイルを保存したディレクトリを対象にgitコマンドの操作が可能です。これらのディレクトリを作業ディレクトリ、つまりワークツリーとして、リポジトリを作成できます。

 画面2では、Webサイト用のhtmlファイルなどを保存した「mypage」というディレクトリで、リポジトリを作成し、コミットするための準備をしています。

画面2 画面2 既存のディレクトリをGitで管理したところ

 画面2にあるように、「git add ファイル名」で個別のファイルやディレクトリを指定したり、「.gitignore」という設定ファイルにデフォルトで対象外とするファイルを設定したりできます(連載第384回)。

 画面2で作成したリポジトリに対して、画面3では全てのファイルをコミットしています。

画面3 画面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

(カレントディレクトリにベアリポジトリを作成する)


画面4 画面4 ベアリポジトリを作成したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。