Git Immersion (Git漬け)を訳しながら使い方を覚えてみる.その5

ぼちぼちと進めます.

LAB 9 変更であって,ファイルではない
http://gitimmersion.com/lab_09.html
目標:gitはファイルではなく変更について機能することを学ぶ


ほとんどのソースコントロールシステムはファイル単位で機能する.ソースコントロールにファイルを追加するとシステムはその時点からファイルの変更を追跡する.
Gitはファイル自体というよりファイルに加えられた変更に着目する.git add file というのはリポジトリにそのファイルを追加させる命令ではない,むしろ後々コミットされる前に現在のファイルの状態を記録させておくということだ.
このLabではこの違いについて掘り下げてみよう.


1.最初の変更:デフォルトの名前も許可する
Hello Worldプログラムを変更して引数がない場合の既定値をもたせる.
vi hello.rb

name = ARGB.first || "World"
puts "Hello, #{name}!"


2.変更を追加する
git add hello.rb


3.二回目の変更:コメントの追加
ここでコメントも追加する.
vi hello.rb

# Default is "World"
name = ARGV.first || "World"

puts "Hello, #{name}!"


4.現在の状態を確認する
git status
このように出力されるはず.

# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: hello.rb
#
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: hello.rb
#

この状態でhello.rbがどのように二回挙げられているかに注目してほしい.最初の変更(デフォルトの名前の設定)はステージングされていてコミットの準備ができている.二回目の変更(コメントの追加)はステージングされていない.このままコミットすれば,コメントはリポジトリに保存されないだろう.
やってみよう.


5.コミットする
ステージングされた変更(初期値設定)をコミットしてから,もう一度状態を見てみよう.
git commit -m " Added a default value"
git status

$ git commit -m " Added a default value"[master 03ea0e0] Added a default value
1 files changed, 2 insertions(+), 1 deletions(-)
$ git status
# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: hello.rb
#
no changes added to commit (use "git add" and/or "git commit -a")

ここでstatusコマンドはhello.rbの変更は保存されていないが,ステージングエリアにはもうないことを示している.


6.二回目の変更を追加する
二回目の変更もステージングエリアに追加してからgit statusを実行してみよう.
git add .
git status
注:ここでファイルを追加するのにカレントディレクトリ('.')を使った.これはカレントディレクトリ以下の変更された全てのファイルを追加できる便利なショートカットだ.しかし全部追加するにしても,コミットするつもりのないファイルを追加することのないように,addする前にstatusをチェックしたほうがいい.
"add ."といううまいやり方があるのも知ってほしいのだが,このチュートリアルでは今後も安全のためにファイルを明示してaddすることにする.

出力はこうなる.

# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: hello.rb
#


7.二回目のコミット
git commit -m "Added a comment"


LAB 10 履歴
http://gitimmersion.com/lab_10.html
目標:プロジェクトの履歴の見方を学ぶ

これまでの変更履歴のリストを見るには,git log コマンドを用いればよい.
git log
すると,こう出力されているはず.

commit b2a48e09bc05afbacbd3b1f53fae63eb86e19dd0
Author: Yoshiteru Toki <〜〜〜〜〜@gmail.com>
Date: Tue Aug 16 21:07:45 2011 +0900

Added a comment

commit 03ea0e092b1a63e7215afb4500d255c0dbf6cf3f
Author: Yoshiteru Toki <〜〜〜〜〜@gmail.com>
Date: Mon Aug 15 17:08:18 2011 +0900

Added a default value

commit 8888ecf86f8eb5853ad1b22d751d7190fcb5d6c6
Author: Yoshiteru Toki <〜〜〜〜〜@gmail.com>
Date: Mon Aug 15 16:19:01 2011 +0900

Using ARGV

commit 718f5be1d67298f201db8cca8211d0c8ee313444
Author: Yoshiteru Toki <〜〜〜〜〜@gmail.com>
Date: Mon Aug 15 14:06:23 2011 +0900

First Commit

これはここまでリポジトリに追加した,全部で4つのコミットのリストだ.


1.一行での履歴
logコマンドで表示される履歴は実際の必要以上に多い.一行形式で表示してもいい.
git log --pretty=oneline
出力は,

b2a48e09bc05afbacbd3b1f53fae63eb86e19dd0 Added a comment
03ea0e092b1a63e7215afb4500d255c0dbf6cf3f Added a default value
8888ecf86f8eb5853ad1b22d751d7190fcb5d6c6 Using ARGV
718f5be1d67298f201db8cca8211d0c8ee313444 First Commit


2.表示するエントリを指定する
表示する履歴を選択するオプションはいくつもある.以下のオプションを試してみよう.
git log --pretty=oneline --max-count=2
git log --pretty=oneline --since='5 minutes ago'
git log --pretty=oneline --until='5 minutes ago'
git log --pretty=oneline --author='Yoshiteru Toki'
git log --pretty=oneline --all


3.ちょっと複雑な指定
先週の変更部分を見直すためにはこうする.
自分の変更だけ見たかったら,"--auther=Toki"とか付け足せばいい.
git log --all --pretty=format:"%h %cd %s (%an)" --since='7 days ago'


4.究極のログの形式
やがて,自分にとって一番やりやすいこんな形式を使うようになった.
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short

出力すると,見た目はこうなる.

* b2a48e0 2011-08-16 | Added a comment (HEAD, master) [Yoshiteru Toki]
* 03ea0e0 2011-08-15 |  Added a default value [Yoshiteru Toki]
* 8888ecf 2011-08-15 | Using ARGV [Yoshiteru Toki]
* 718f5be 2011-08-15 | First Commit [Yoshiteru Toki]

詳しく見てみよう.

・--pretty="..." というのは出力形式の定義.
・%h というのはそのコミットのハッシュ値
・%d はコミットの付属情報.(たとえばブランチの頭とかタグとか)
・%ad は変更された日付
・%s はコメント
・%an は変更者名
・--graph はコミットツリーをアスキーグラフレイアウトで表示することを示す.
・--date=short は日付形式を短くする

いろんな形式でログを見たいときがある.幸い,次のLabでgit aliasesについて学ぶことができる.


5.その他のツール
ログの履歴を見るとき,Macならgitx,ほかのプラットフォームでもgitkというのが便利だ.