Git入門:バージョン管理のきほん
リポジトリを作る(git init)
この回でやること
git init が何を作るのかを .git ディレクトリの中身から確かめ、ワークツリー・ステージ・リポジトリという 3 層モデルを身につけましょう。
- 読む 約 6 分
フォルダはあるが、履歴を置く場所が無い
練習用のフォルダを 1 つ作ります。Windows の Git Bash でも同じコマンドが動きます。
ターミナル
$ cd ~
$ mkdir git-practice
$ cd git-practice
$ pwd
/Users/taro/git-practiceフォルダ名や、その上の階層に日本語やスペースが入っていると、あとでコマンドの書き方に悩みます。学習中は英数字とハイフンだけにしておくと、余計なつまずきが減ります。
このフォルダを Git の管理下に置きます。
ターミナル
$ git init
Initialized empty Git repository in /Users/taro/git-practice/.git/ダウンロードもサーバーへの接続もしていません。一瞬で終わります。作られたのは .git という隠しディレクトリ 1 つだけで、もとからあったファイルには指一本触れていません。リポジトリとは、この履歴と管理情報の保管場所のことです。
.git の中にあるのは、保管庫と目印
ls -a を打つと .git が見えます。中を覗いてみます。
ターミナル
$ ls .git
HEAD config description hooks info objects refs
$ cat .git/HEAD
ref: refs/heads/main覚えるのは 3 つで足ります。objects が履歴の実体、refs がブランチ名とコミットの対応表、そして HEAD が「今どこにいるか」を書いた 1 行のファイルです。表示は main にいるという意味で、前回設定した init.defaultBranch が効いている証拠でもあります。HEAD という語は Git のエラーメッセージに何度も出てくるので、これだけは覚えておきます。
.git の中は、読むのは自由ですが手で書き換えてはいけません。編集すると壊れて、復旧できなくなります。
ファイルを置いても、まだ何も記録されていない
ファイルを 1 つ作って、Git が何と言うか見ます。
ターミナル
$ echo "# Git practice" > README.md
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.mdUntracked は「一度も記録していない」という意味です。git init した直後は、もとからあったファイルも含めて全部がこの状態になります。Git が勝手に記録を始めることはありません。何を残すかは、こちらが選びます。
場所を間違えて init したとき
いちばん多い事故は、cd を忘れてホームディレクトリで git init してしまうことです。こうなると git status に数万件のファイルが並び、動作も重くなります。
気づいたら .git を消せば元に戻ります。
ターミナル
$ cd ~
$ rm -rf .gitrm -rf は中身ごと消すので、パスを声に出して確かめてから実行してください。消えるのは .git だけで、ほかのファイルには影響しません。
似た事故が 2 つあります。すでにリポジトリになっている場所でもう一度 git init した場合は、再初期化されたと表示されるだけで履歴は消えません。リポジトリの中のサブフォルダで打ってしまった場合は、そのフォルダが外側から中身の見えない塊として扱われるので、rm -rf そのフォルダ/.git で内側だけ消します。
git initが作るのは.gitディレクトリだけ。もとのファイルには触らない.gitはHEADが現在地、objectsが履歴の実体、refsがブランチの対応表- 記録は自動では始まらない。
git initの直後は全ファイルが未追跡