ローカルリポジトリの初期化

GitBeginner
オンラインで実践に進む

はじめに

この実験では、Git を使ったバージョン管理の第一歩を学びます。通常のディレクトリを Git リポジトリに変換し、時間の経過に伴うファイルの変更を追跡できるようにします。

この操作によって、通常のフォルダーがバージョン管理されたプロジェクトになります。Git は、履歴、メタデータ、参照情報を保存する非表示の .git ディレクトリを作成することで、この仕組みを実現します。

この非表示ディレクトリは、リポジトリの内部データベースです。目に見えるファイルがプロジェクトの内容であるのに対し、.git は Git がバージョンやコミット間の関係を記録するために使用する仕組みです。

このプロセスには、次の 3 つの主な段階があります。

  • 初期化: リポジトリを設定します。
  • ステージング: 保存するファイルを準備します。
  • コミット: ファイルのスナップショットをリポジトリの履歴に保存します。

この実験の最後には、最初のファイルをコミットしたローカル Git リポジトリが完成します。

プロジェクトディレクトリ project_x を作成する

このステップでは、プロジェクトファイルを保存する新しいディレクトリを作成します。Git のリポジトリは通常、1 つのディレクトリ内に作成します。

まず、ターミナルを開きます。現在の作業ディレクトリは /home/labex/project です。mkdir コマンドを使って、project_x という名前の新しいディレクトリを作成します。

次のコマンドを実行します。

mkdir project_x

次に、cd コマンドを使って、この新しいディレクトリに移動します。

cd project_x

Git を初期化するディレクトリ内に移動していることが重要です。pwd コマンドを使うと、現在の場所を確認できます。

pwd

出力に /home/labex/project/project_x と表示されます。

git init を使ってこのディレクトリ内で Git を初期化する

このステップでは、通常のディレクトリを Git リポジトリに変換します。この処理を「初期化」と呼びます。

project_x ディレクトリ内で、次のコマンドを実行します。

git init

次のような出力が表示されます。

Initialized empty Git repository in /home/labex/project/project_x/.git/

このコマンドは、.git という名前の非表示サブディレクトリを作成します。この非表示ディレクトリには、Git がプロジェクトを追跡するために必要なメタデータとオブジェクトデータベースが保存されます。.git の内部を変更する必要はありませんが、このディレクトリが作成されることを覚えておきましょう。

つまり、git init は何かを「アップロード」したり、それ自体で履歴を作成したりするコマンドではありません。今後のスナップショットをローカルで Git が追跡できるように、ディレクトリを準備するだけです。

非表示ファイルを含むすべてのファイルを一覧表示して、.git の存在を確認できます。

ls -a

一覧に .git が表示されます。

ファイル readme.txt を作成する

このステップでは、追跡対象のファイルを作成します。空のリポジトリはあまり役に立たないため、内容を追加しましょう。

readme.txt という名前の単純なテキストファイルを作成します。echo コマンドを使うと、ファイルの作成とテキストの追加を同時に実行できます。

次のコマンドを実行します。

echo "This is my first git project" > readme.txt

このコマンドは、This is my first git project という内容の readme.txt を作成します。

ファイルが作成されたことを確認します。

ls

一覧に readme.txt が表示されます。

git status を使ってリポジトリの状態を確認する

このステップでは、リポジトリの状態を確認します。Git は、作成したすべてのファイルを自動的に追跡するわけではありません。追跡対象として Git に知らせる必要があります。

git status は、Git で最も役立つコマンドの 1 つです。追跡対象のファイル、変更されたファイル、コミット用にステージングされたファイルを確認できます。

次のコマンドを実行します。

git status

次のような出力が表示されます。

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
 readme.txt

nothing added to commit but untracked files present (use "git add" to track)

Untracked files の下に readme.txt が表示されていることを確認してください。これは、Git がファイルの存在を認識しているものの、まだその変更を追跡していないことを示します。

ここで、Git の重要な区別が分かります。ファイルは作業ディレクトリに存在していても、まだバージョン管理の対象とは限りません。Git はそのファイルを認識していますが、リポジトリの履歴にはまだ含めていません。

git add を使ってファイルをキャッシュ領域(ステージング)に追加する

このステップでは、ファイルを「ステージング領域」(インデックスとも呼ばれます)に移動します。ステージング領域は、変更内容を正式な履歴にコミットする前に、変更のスナップショットを準備する場所です。

ステージング領域は、Git の重要な概念の 1 つです。作業ディレクトリとリポジトリの履歴の間に位置し、次のコミットに含める変更を正確に選択できます。

readme.txt の追跡を開始し、ステージングするには、git add コマンドを使います。

git add readme.txt

次に、状態をもう一度確認して、何が変わったかを確認します。

git status

出力は次のようになります。

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
 new file:   readme.txt

readme.txt が Changes to be committed の下に表示されていることを確認してください。これは、ファイルがステージングされ、コミットできる状態になったことを示します。

このため、Git は 3 つの状態を使うワークフローとして説明されることがあります。ファイルが作業ツリーにある状態、変更がステージング領域にある状態、そしてスナップショットがコミット履歴に保存された状態です。

git commit -m を使ってファイルをコミットする

このステップでは、現在ステージング領域にある変更をリポジトリの履歴へ恒久的に保存します。この操作を「コミット」と呼びます。

コミットでは、プロジェクトのスナップショットを保存し、変更内容を説明するメッセージが必要です。-m オプションを使うと、このメッセージをコマンドラインから直接指定できます。

次のコマンドを実行して、変更をコミットします。

git commit -m "Initial commit"

コミットが完了したことを示す、次のような出力が表示されます。

[master (root-commit) 1a2b3c4] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

最後に、もう一度ステータスを確認します。

git status

出力に次の内容が表示されます。

On branch master
nothing to commit, working tree clean

これは、作業ディレクトリの内容がリポジトリの最新コミットと一致していることを示します。これで、最初のバージョンを保存できました。

まとめ

この実験では、ローカル Git リポジトリを正常に初期化しました。次の操作を学びました。

  1. プロジェクトディレクトリを作成する。
  2. git init を使って Git を初期化する。
  3. 新しいファイルを作成する。
  4. git status でリポジトリの状態を確認する。
  5. git add を使ってファイルをステージングする。
  6. git commit を使ってファイルをリポジトリの履歴にコミットする。

これらは、Git を使うときに日常的に使用する基本的なコマンドです。これで、変更を追跡し、バージョンを保存し、プロジェクトの履歴を管理できるようになりました。