git init コマンド: cancel, main, --bare --template オプション
この記事では、git init
コマンドに関連するさまざまなトピックについて説明します。
git init
が作成する .git
フォルダの中身についての簡単な説明、デフォルトの main
ブランチの変更、--bare
オプションと --template
オプション、そして初期化を取り消す方法までを扱います。
Git は現代的なプログラミングの柱のひとつなので、主要なトピックごとにひとつの記事を投稿することにします。
1. git init` とは?
git init
コマンドは git initialize の略で、git を使ってディレクトリのバージョン管理を始めるときに使います。
この方法でバージョン管理を始めると、新しい git リポジトリを作成したことになります。リポジトリには、ファイルの変更やブランチ、タグ、ワーカー情報など、たくさんのメタデータが含まれています。
git init
コマンドで新しいリポジトリを作成すると、内部的に .git
ディレクトリが作成され、バージョン管理に必要なさまざまなメタデータが格納されます。
下のスクリーンショットは、git init
コマンドで作成された .git
ディレクトリの内部を示しています。
1.1. .git ディレクトリ内のファイルとディレクトリの説明 [#1.1].
.git
ディレクトリ内のファイルとディレクトリを簡単に説明します。
config
: 現在のリポジトリの設定のみを含むファイル。リモートリポジトリの URL、ベアリポジトリかどうか、ブランチの設定などが含まれ、グローバルな git 設定を上書きします。デフォルトの設定は
$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
HEAD
: 現在作業しているブランチへのシンボリックリンクです。git はこのファイルを通して、現在作業しているブランチを記録しています。HEAD ファイルは以下の値をとります。
$ cat HEAD
ref: refs/heads/main
description
: 現在のリポジトリの短い説明を含むファイルです。さまざまな git ツールでは、このファイルの内容を使ってリポジトリを紹介します。何も登録されていない場合は、以下の値になります。
$ cat descripton
Unnamed repository; edit this file 'description' to name the repository.
-
objects
: git にコミットした内容はすべて git オブジェクトとして保存されます。このフォルダはオブジェクトの DB として機能し、SHA-1 ハッシュを使用して blob、ツリー、コミットなどのほとんどのものを保存します。 -
Refs
: ブランチ、タグ、リモートブランチへのリンクを保持します。heads、tags、remotesの3つのサブディレクトリに分かれている。 -
info
: 主にexclude
フォルダでバージョン管理から除外するデータを管理する。.gitignore
ファイルのような役割を果たす。 -
hooks
: 特定のイベントが発生したときに IGT が自動的に実行するフックスクリプトのサンプルがあるディレクトリ。pre-commitやpre-rebaseなど、様々なシナリオに対応したフックスクリプトがあります。スクリプトを実行したい場合は、ファイル名の後ろの.sample
を削除して実行可能ファイルにしてください。以下は、hooks ディレクトリにあるスクリプトです。
この git init
コマンドは新しいリポジトリを作成し、それに関連する設定ファイルやデータを置く場所を作ります。
2. メインブランチの作成
伝統的に git のデフォルトブランチは master
でしたが、さまざまな理由から main
に変更するようになりました。現在では何も設定しなくてもデフォルトで main
ブランチが推奨されていますが、バージョンによっては手動で設定する必要があるかもしれません。そこで、このセクションではデフォルトのブランチを変更する方法を説明します。
デフォルトブランチは git のグローバル設定で変更できます。ローカルでは、この設定はあなたのアカウントにのみ適用されます。コマンドは次のとおりです。
$ git config --global init.defaultBranch main
セットアップが完了したら、git ini
t コマンドを使って新しいレポジトリを作成した場合は、以下のコマンドを使って現在作業しているブランチを確認することができます。
$ git branch
* main
まだ最初のコミットをしていない場合は、以下のコマンドで確認できる。
$ git symbolic-ref HEAD
refs/heads/main
3. bareオプション
git init
コマンドで使用できるオプションの中で、最もポピュラーなオプションは --bare
オプションです。このオプションはリモートリポジトリを作成するために使います。
リモートリポジトリとは、複数の開発者がひとつのリポジトリに貢献したり管理したりするために作成されるリポジトリのことです。リモートリポジトリは高度な共同作業環境で使用されるべきものです。リモートリポジトリをホストする一般的なサービスには、Github、GitLab、BitBucket などがあります。
Githubで新しいリモートリポジトリを作成する場合を考えてみましょう。--bare
オプションをつけないと、新しいリモートリポジトリはGithubサーバー上のローカル環境に固有のデータと設定で作成されます。
管理したいのはローカル環境のソースコードです。
この場合、Githubは--bare
オプションを使って何も設定されていない空のシェルリポジトリを作成し、リモートリポジトリとして使用します。
上記のようなホスティングサービスを使っておらず、自分でgitサーバーを立ち上げてリモートリポジトリを作成したい場合は、--bare
オプションを使う必要があります。使い方は簡単です。
$ git init --bare my_remote_repo.git
上で示したように、オプションを追加することができます。ひとつ注意点があります。ベアリポジトリの名前には必ず拡張子 .git
をつけてください。
4) -テンプレートオプション
git init
コマンドは、常に同じファイルとディレクトリ構造を作成します。もし、同じ README.md
ファイルを会社で作成する 10 の異なるプロジェクトに追加したいとしたらどうでしょうか。ファイルの作成と修正を10回繰り返さなければなりません。
そこで、余計な修正作業をすることなく、自分好みの新しいレポを作成するための --template
オプションの登場です。
その名の通り、テンプレートに従って新しいレポを作成し、セクション1.1で見たすべてのファイルとディレクトリをテンプレートの対象にすることができます。
4.1. テンプレートオプションの使用
カスタムテンプレートを作成するには、まず git init
コマンドで使われるデフォルトのテンプレートをコピーします。テンプレートディレクトリはオペレーティングシステムによって異なる場所にあるので、以下のコマンドで探すことをお勧めします。
$ find / -type d -name "templates" 2>/dev/null
検索結果にたくさん出てくるパスの中で、git-core
ディレクトリの中にあるtemplates
ディレクトリが探しているものです。
Mac OSでは、デフォルトでインストールされているgitを使用している場合、以下のパスに存在します。テンプレート内のフォルダは次のようになっています。セクション 1.1ですでに見たことがあるので、おなじみでしょう。
このテンプレートディレクトリをコピーして必要なファイルやフォルダを追加したら、2つの方法のいずれかで新しいレポジトリを作成します。
まず、--template
オプションを使います。
これはテンプレートを使いたいが、プロジェクトごとに情報を変更する必要がある場合に便利です。
コマンドは以下の通りです
$ git init --template=/path/of/template-dir
2つ目の方法は、グローバル設定に登録して永続的に使用することです。毎回同じテンプレートでレポを作成する場合、これは便利です。以下のコマンドを使うことができる。
$ git config --global init.templateDir /path/of/template-dir
テンプレートオプションを与えなくても、希望するパスのテンプレートを使って新しいレポが作成されることがわかります。
5. キャンセル、削除、アンインストール
バージョン管理のために git init
コマンドを取り消したいことがあります。
その場合は、作成された .git
ディレクトリを削除してください。
ディレクトリの下にあるすべてのファイルとフォルダーを削除する必要があるので、次のコマンドを入力してください。
$ rm -rf .git
Windowsのコマンドプロンプトを使用している場合は、以下のコマンドを入力します。
$ rmdir /s /q .git
WindowsでPowershellを使っている場合は、以下のコマンドを入力する必要がある。
Remove-Item -Recurse -Force .git
6. おわりに
この記事では、git init
コマンドに関するさまざまなトピックを取り上げました。
.git
フォルダの中身、デフォルトの main
ブランチの変更、--bare
オプションと --template
オプション、そして初期化を取り消す方法まで取り上げました。
Git を使って新しいリポジトリを作り始める助けになれば幸いです。
