initコマンドとは
init
コマンドは新しいGitリポジトリを作成するために使用します。リポジトリは「ファイルやディレクトリの状態を管理する場所」のことを指します。一連のGitのコマンドはリポジトリが管理しているディレクトリ内で使用することができます。
実際にinit
コマンドを実行してみると現在のディレクトリに**.git**ディレクトリが作成されます。基本的には.gitディレクトリがリポジトリとなります。
git init
の処理を各コマンドの出力から確認してみましょう。今回リポジトリを作成するディレクトリの名前はgit_dirとします。
# 現在のディレクトリ
$ pwd
/home/hogehoge/git_dir
#git_dirが空であることを確認
$ ls -a
./ ../
$ git init
Initialized empty Git repository in /home/hogehoge/git_dir/.git/
# .gitディレクトリが作成されていることを確認
$ ls -a
./ ../ .git/
git init
によってgit_dirディレクトリに.gitディレクトリ(=リポジトリ)が作成されます。リポジトリが作成されることで、gitコマンドでgit_dirディレクトリを管理できるようになります。このようにgitを使えるように準便を整えるためのコマンドがinitコマンドです。
オプション
基本オプション
-q / --quiet
コマンド実行時に表示されるメッセージを省略します。ただし、errorメッセージとwarningメッセージは表示されます。
$ git init
Initialized empty Git repository in /home/hogehoge/git_dir/.git/
# 作成時のメッセージが表示されない
$ git init -q
--bare
ベアリポジトリと呼ばれる特殊なGitリポジトリを作成します。bareとは日本語で「裸の」という意味があります。ベアリポジトリには、実際のプログラムやディレクトリはありませんが**.gitの中にあったファイルだけ持っています。ベアリポジトリはpush先となる集約されるようなリポジトリに対して作成します。ベアリポジトリでないリポジトリはノンベアリポジトリ**と呼びます。--bare
を使用することで、対象のディレクトリを.gitディレクトリそのものとして扱います。
ベアリポジトリの特徴
- 作業用ディレクトリを持たない
- 管理用ディレクトリ(リポジトリ)のみ持つ
$ git init
Initialized empty Git repository in /home/hogehoge/git_dir/
$ ls -a
./ ../ .git/
$ ls .git/
config description HEAD hooks/ info/ objects/ refs/
$ git init --bare
Initialized empty Git repository in /home/hogehoge/git_dir/
$ ls
config description HEAD hooks/ info/ objects/ refs/
ノンベアリポジトリでは現在のディレクトリに**.gitディレクトリが作成されますが、ベアリポジトリでは現在のディレクトリが.gitディレクトリの中身そのもの**になっていることが確認できます。
応用オプション
--object-format=<format>
#####<format> = sha1(default), sha256
gitはプロジェクトの状態をオブジェクトで管理しています。いくつかの種類のオブジェクトがありますが、オブジェクトは全てzlibで圧縮されハッシュ値が生成されています。--object-format
オプションではハッシュ値のハッシュ関数を指定することができます。Gitではsha1とsha256の2種類のみ指定できます。
※Git Documentationではsha1が推奨されているので特に理由がなければデフォルトのsha1のままで大丈夫です。
--template=<template_directory>
#####<template_directory> = テンプレートディレクトリ名
テンプレートとなるディレクトリ(TEMPLATE DIRECTORY)を指定します。TEMPLATE DIRECTORYを事前に設定しておくことで同じような状態を再現することができます。
--separate-git-dir=<git dir>
#####<git dir> = Gitリポジトリにするディレクトリ
git init
を実行すると通常は.gitディレクトリを作成しますが。--separate-git-dir
オプションを指定すると、本来作成される.gitディレクトリの代わりに**.gitテキストファイル**を生成します。.gitテキストファイルには<git dir>で指定されたディレクトリのパスが記載されています。.gitディレクトリに作成されていた一連のファイルは全てこの指定したディレクトリに置かれます。
すでに存在するGitリポジトリでgit init --separate-git-dir
をおこなうとGitリポジトリは<git dir>に移動します。
# 現在のディレクトリ
$ pwd
/home/hogehoge/git_dir
# オプションを使用
$ git init --separate-git-dir=/home/hogehoge/sep_git_dir/
Initialized empty Git repository in /home/hogehoge/sep_git_dir/
# git_dirディレクトリには.gitファイルが生成
$ ls -a
./ ../ .git
# 作成されたテキストファイルの中身を確認
$ cat .git
gitdir: /home/hogehoge/sep_git_dir/
# sep_git_dirディレクトリにはリポジトリが生成
$ ls /home/hogehoge/sep_git_dir/
config description HEAD hooks/ info/ objects/ refs/
このようにすることでsep_git_dir
をGitリポジトリとして扱い、git_dir
を作業用ディレクトリとして扱うことができます。作業ディレクトリではGitコマンドを使用できますが.gitディレクトリが存在しないため、ファイル検索がスムーズにおこなえるようになります。また、.gitディレクトリを隠しておくことで誤ってファイルを書き換えてしまうことを防ぐこともできます。
-b <branch-name> / --initial-branch=<branch-name>
#####<branch-name> = ブランチ名
初期化時に自動で作成されるブランチの名前を指定します。Gitではデフォルトでmasterブランチが作成されていますが、それ以外の名前にしたいときにこのオプションを使用します。デフォルトのブランチ名は環境変数init.defaultBranchで設定されているため、こちらを変更することでデフォルトのブランチ名を設定することもできます。
--shared=<permission>
#####<option> = (false|true|umask|group|all|world|everybody|0xxx)
作成しようとしているリポジトリは共有リポジトリとして作成されます。デフォルトではリポジトリは作成したユーザーしかpushができません。複数人で一つのプロジェクトをGitで運用する場合は、--sharedオプションで権限を追加します。
false / umask : umaskの値を利用する。--sharedオプションを使用しない場合も適用される。
true / group : グループに対して書き込み権限を追加する
all / world / everybody : グループに対して書き込み権限を追加し、その他のユーザーに対して読み込み権限を追加する
0xxx : 4桁の数値でパーミッションを指定する
まとめ
initコマンドはGitリポジトリを作成する際に使用します。自らプロジェクトを立ち上げる際は必ず使用するコマンドなので覚えておきましょう。