第3章 最初のリポジトリを作る

リポジトリを作る

Git のリポジトリは「ただのフォルダに .git/ という隠しディレクトリを足したもの」と考えて差し支えない。 作るのは git init 一発である。

Bash
mkdir my-project
cd my-project
git init
# => Initialized empty Git repository in /path/to/my-project/.git/

出力の通り、空の Git リポジトリが初期化された。ls -la してみると .git フォルダが生成されているはずである。

Bash
ls -la
# => .git/  ...

ls .git/
# => HEAD  config  description  hooks/  info/  objects/  refs/  ...
注意

.git/ の中身は Git がコミット履歴やオブジェクトを管理するために使っている実体。 勉強目的で覗くのは大いに結構だが、中のファイルは決して手で書き換えないこと。壊すとリポジトリが復旧不能になることもある。

最初のファイルを置いてみる

まだ空っぽのリポジトリなので、何か適当なファイルを作ってみよう。README でも main.py でもなんでもいい。

Bash
echo "# My Project" > README.md

git status の読み方

Git を使っていて一番よく打つコマンドは間違いなく git status である。 「いまの作業ツリーとステージングがどんな状態にあるか」を全部教えてくれる。

Bash
git status

典型的な出力はこんな感じになる。

Bash 出力例
On branch main

No commits yet

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

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

Git が認識するファイルの状態には大きく次の 3 つ (加えて「追跡外」) がある。git status の文面はこのどこに該当するかを教えている。

MEMO

第 1 章で見た「作業ツリー / ステージング / リポジトリ」の三層と、上の 3 つの状態は完全に対応している。 「追跡外 → 作業ツリー → ステージング → リポジトリ」という流れをイメージして読むと、出力のどの区分を眺めているか迷わなくなる。

.gitignore で追跡したくないものを除外する

プロジェクトフォルダの中にはコミットすべきでないファイル — たとえば node_modules/.env、ビルド成果物、エディタ設定 — がたいてい混ざっている。 これらを毎回 git status に表示されると邪魔だし、うっかり git add . で全部コミットに入れてしまう事故も起こる。

そこで、リポジトリ直下に .gitignore という名前のファイルを置き、そこに無視したいパターンを 1 行ずつ書く。 .gitignore 自体は Git で追跡してコミットしてよい (チーム全員に同じ除外ルールを適用するため)。

.gitignore の例
# 依存パッケージ
node_modules/

# 環境変数 (秘匿情報を含む)
.env
.env.local

# ビルド成果物
dist/
build/

# OS / エディタ設定
.DS_Store
.vscode/
.idea/

# から始まる行はコメント。/ で終われば「ディレクトリ配下すべて」という意味になる。 ファイル名そのままを書けば、プロジェクト内のその名前のファイルはすべて対象である。

POINT

言語やフレームワークごとに推奨される .gitignore の雛形は github/gitignore リポジトリにまとまっている。 Node.js なら Node.gitignore、Python なら Python.gitignore をそのまま下敷きにして、必要な行を足し引きするのが楽である。

まとめ