前記事 > Git 初期設定
「プログラマーじゃないけど Git 入門」
次は、ローカルで Git を使ってみましょう。
01git init
Git bash(インストールによってはコマンドプロンプトでもOK)を立ち上げ、適当なディレクトリに移動した後、
$ mkdir git-sample $ cd git-sample/ $ git init Initialized empty Git repository in ./git-sample/.git/
として、カレントディレクトリにリポジトリをつくります。表現の仕方はあるいは、ディレクトリをリポジトリ化するといいますか、これにより、カレントディレクトリに .gitディレクトリをつくられ、カレントディレクトリ内がバージョン管理できるようになります。.gitディレクトリの中は前回見たとおりです。
02git add
カレントディレクトリに適当なテキストファイルをつくります。Windows ですから GUI のエディタで sample.txt などと保存し、続いて、
$ git add sample.txt
とします。このコマンド git addは、該当ファイル(指定によってはディレクトリ)をステージングエリアに追加すると表現されるようです。
Pro Git 日本語版電子書籍にある次の画像がそのイメージです。Stage Fixed と記載された行為になります。
ファイルをワーキングエリアからステージングエリアに登録し追跡を開始するという理解でいいと思います。git statusで状態を見てみますと、
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: sample.txt
と表示され、sample.txt をコミットする準備ができている、つまりステージングエリアにあるということです。
で、そのときどんなファイルが作られるか見てみますと、

.git\index と .git\objects\f3\ハッシュ値? の2つのファイルがつくられます。再度git addとすればこの2つのファイルが上書きされます。
git statusのメッセージに、unstage の説明がありましたので、試しにやってみましょう。
$ git rm --cached sample.txt
rm 'sample.txt'
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
sample.txt
nothing added to commit but untracked files present (use "git add" to track)
状態を見てみますと、Untracked つまり追跡されていないファイルがあるに変わります。.git内のファイルは、indexが書き換えられるだけです。
ということは、indexファイルにステージングエリアの情報が書き込まれているということでしょう。
再度git addしておきましょう。
03git commit
次は、ステージングエリアのファイルの状態を保存するgit commitです。git commitだけですと、コミットメッセージを求めるエディタが立ち上がりますので、通常はgit commit -m "commit massage"とします。
$ git commit -m "最初のコミット" [master (root-commit) 2d88c89] 最初のコミット 1 file changed, 2 insertions(+) create mode 100644 sample.txt
試しに日本語のメッセージでコミットしてみました。ログを見てみます。
$ git log
commit 2d88c89aaa4aaebf88de79c433d10792b0a2ac8c
Author: ******* <*******@gmail.com>
Date: Sun Mar 12 15:54:46 2017 +0900
最初のコミット
これで sample.txt の現在の状態を保存し、Git で管理できるようにしたということでいいと思います。
.gitディレクトリ内を見てみましょう。

これを見ますと、多分、.git\objects\2d\88c89aaa4aaebf88de79c433d10792b0a2ac8cが現在のファイル状態が保存されている実態でしょう。
そして、.git\refs\heads\masterには2d88c89aaa4aaebf88de79c433d10792b0a2ac8cという数値が保存されていますので、これは上の実態のディレクトリとファイル名なんだと思います。
.git\COMMIT_EDITMSGにはコミットメッセージが保存されています。この場合は、
最初のコミット
となっています。
.git\logs\HEADと.git\logs\refs\heads\masterは現時点ではまったく同じ内容のファイルでログとして出力されるようです。コミットを重ねていくとどちらかが変化していくのかもしれません。
今回はここまでです。
