git init

このページでは、git init コマンドについて詳しく説明します。このページを最後まで読むと、git init の主要な機能と拡張機能がわかります。ここでは、以下について説明します。

  • git init オプションと使い方
  • .git ディレクトリの概要
  •  カスタムの git init ディレクトリ環境の値
  • git init 対 git clone
  • git init ベアリポジトリ
  • git init テンプレート

git init は Git リポジトリを新たに作成するコマンドです。このコマンドは、バージョン管理を行っていない既存のプロジェクトを Git リポジトリに変換する場合や、空の新規リポジトリを作成して初期化する場合に使用します。このコマンドを除くほぼすべてのコマンドは初期化されたリポジトリ以外に適用できないため、新規プロジェクトを開始する場合、通常はこのコマンドが最初に実行するコマンドとなります。

git init を実行すると、現在の作業ディレクトリに .git サブディレクトリが作成され、新しいリポジトリに必要な Git メタデータがすべて格納されます。このメタデータには、オブジェクト、参照、テンプレートファイル用のサブディレクトリが含まれます。現在チェックアウトされているコミットを指す HEAD ファイルも作成されます。

プロジェクトのルートディレクトリの .git ディレクトリを除けば、既存のプロジェクトはそのまま残ります (SVN と異なり、Git はすべてのサブディレクトリに .git サブディレクトリを必要としません)。

既定では、git init は、Git 構成を .git サブディレクトリパスで初期化します。サブディレクトリパスは、必要に応じて他の場所に変更、カスタマイズが可能です。$GIT_DIR 環境変数をカスタムのパスに設定すると、git init はそこで Git 構成ファイルを初期化します。また、--separate-git-dir 引数を渡しても同じ結果となります。独立した .git サブディレクトリを使う一般的な例は、システム構成の「ドットファイル」 (.bashrc.vimrc、など) をホームディレクトリに保持したまま、.git フォルダーを別の場所にすることです。
 

使用法

SVN と比較すると、git init コマンドは、新規のバージョン管理プロジェクトをきわめて簡単に作成できます。Git では、手作業でリポジトリの作成、ファイルのインポート、作業コピーのチェックアウトなどを行う必要はありません。また、既存のサーバーや管理者権限も不要です。プロジェクトサブディレクトリに移動して git init を実行するだけで、完全な機能を備えた Git リポジトリを作成できます。

git init

現在のディレクトリを Git リポジトリに変換します。このコマンドを実行すると現在のディレクトリに .git サブディレクトリが追加され、プロジェクトのバージョンを記録できるようになります。

git init <directory>

指定したディレクトリに空の Git リポジトリを作成します。このコマンドを実行すると、.git サブディレクトリのみを含む新規サブディレクトリが作成されます。

プロジェクトディレクトリで既に git init を実行していて .git サブディレクトリが存在している場合も、安心して同じプロジェクトディレクトリで git init を再実行できます。既存の .git 構成は上書きされません。

git init 対 git clone

簡易メモ:git initgit clone は非常に紛らわしいです。全体的に見れば、どちらも「新しい Git リポジトリの初期化」に使用できます。ただし、git clonegit init に依存しています。git clone は、既存リポジトリのコピーの作成に使用します。内部的には、git clone はまず git init を呼び出して新規リポジトリを作成します。その後、既存リポジトリからデータをコピーし、一連の作業ファイルを新たにチェックアウトします。詳細については、git clone ページをご覧ください。

ベアリポジトリ --- git init --bare

git init --bare <directory>

作業ディレクトリを持たない空の Git リポジトリを作成して初期化します。共有リポジトリは必ず --bare フラグを指定して作成する必要があります (下の補足説明参照)。--bare フラグを指定して作成したリポジトリの名称の最後には、慣例的に .git が付加されます。たとえば、my-project という名称のリポジトリのベアバージョンは、my-project.git という名称のディレクトリに格納されます。

--bare フラグを指定すると、作業ディレクトリを持たないリポジトリが作成されます。このリポジトリでファイルの編集や変更のコミットをすることはできません。git push と git pull は行うが、直接コミットを行わない場合は、ベアリポジトリを作成します。ノンベアリポジトリにブランチのプッシュを行うと変更が上書きされる可能性があるため、中央リポジトリは必ずベアリポジトリとして作成する必要があります。--bare は、リポジトリを開発環境ではなくストレージ領域として認識させる方法と考えてください。つまり、実質的にすべての Git ワークフローにおいて、中央リポジトリはベアであり、開発者のローカルリポジトリはノンベアということです。

Git チュートリアル: ベアリポジトリ

git init --bare の最も一般的な使用例は、以下のようにリモートの中央リポジトリの作成です。

ssh <user>@<host> cd path/above/repo git init --bare my-project.git

まず、中央リポジトリを作成する予定のサーバーに SSH で接続します。次に、プロジェクトを保存するディレクトリに移動します。最後に、--bare フラグを使用して中央ストレージリポジトリを作成します。その後、開発者は my-project.git を使用して、各自の開発用マシーンにローカルコピーを作成します。

git init テンプレート

git init <directory> --template=<template_directory>

新しい Git リポジトリを作成して初期化し、<template_directory> からファイルをコピーします。

テンプレートを使うと、事前に定義した .git サブディレクトリで新しいリポジトリを初期化できます。新しいリポジトリの .git サブディレクトリにコピーする、既定のディレクトリとファイルを設定したテンプレートを構成できます。通常、既定の Git テンプレートは `/usr/share/git-core/templates` ディレクトリにありますが、マシンによってパスが異なる場合があります。

既定のテンプレートは、テンプレート機能の活用方法がわかる優れた参考資料です。既定のテンプレートで使われている強力なテンプレート機能に、Git フック構成があります。事前定義済みの Git フックを使ったテンプレートを作成すれば、すぐに使える一般的なフックを使って、新たに作成した Git リポジトリを初期化できます。Git フックの詳細については、Git フックのページをご覧ください。

構成

git init <directory> の構成では、<directory> 引数を必ず使用します。<directory> を指定すると、このコマンドはそのディレクトリ内で実行されます。ディレクトリが存在しない場合は作成されます。既に説明したオプションや構成以外にも、Git init にはコマンドラインオプションがいくつかあります。すべてのオプションは以下のとおりです。

-Q

--QUIET

「重大レベル」のメッセージ、エラー、警告のみを出力します。その他の出力はすべて抑制されます。

--BARE

ベアリポジトリを作成します (上述の「ベアリポジトリ」セクションをご覧ください)。

--TEMPLATE=<TEMPLATEDIRECTORY>

使用するテンプレートがあるディレクトリを指定します (上述の「git init テンプレート」セクションをご覧ください)。

--SEPARATE-GIT-DIR=<GIT DIR>

<git dir> へのパスを含んだテキストファイルを作成します。このファイルは、.git ディレクトリへのリンクの役目を果たします。これは、プロジェクトの作業ファイルとは違う場所やドライブに .git ディレクトリを格納する場合に役立ちます。--separate-git-dir の一般的な使用例を以下に挙げます。

  • システム構成の「ドットファイル」 (.bashrc、.vimrc など) をホームディレクトリに保持したまま、.git フォルダーを別の場所にする。
  • Git 履歴のディスクサイズが非常に大きくなり、独立した別の大容量ドライブに移す必要がある。
  • `www:root` のような公開ディレクトリに Git プロジェクトを作成したい。
     

既存のリポジトリで git init --separate-git-dir を呼び出すと、.git dir は指定された <git dir> パスに変わります。

--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)] 

新規リポジトリのアクセス権限を設定します。Unix レベルの権限を使っているユーザーとグループのうち、リポジトリとのプッシュ / プルを許可するユーザーとグループを指定します。

既存の code をベースにして新しい Git リポジトリを作成する

cd /path/to/code \
git init \
git add .\
git commit

新しいベアリポジトリを作成する

git init --bare /path/to/repo.git

git init テンプレートを作成し、そのテンプレートから新しい Git リポジトリを作成して初期化する

mkdir -p /path/to/template \
echo "Hello World" >> /absolute/path/to/template/README \
git init /new/repo/path --template=/absolute/path/to/template \
cd /new/repo/path \
cat /new/repo/path/README

Git を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める