Populating a git repository
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l }
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j …とりあえず適当にファイルを作ってみて
ヽム:.} ii;_j ii;リ ル iレヽ
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
____
/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ 毒にも薬にもならないファイルを作るならやる夫にまかせるお!
| |r┬-| |
\ `ー'´ /
ノ \
$ echo "Hello World" >hello
$ echo "Silly example" >example
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } お疲れさま
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j これらの変更をチェックインするには 2段階のステップを踏まなければいけない
ヽム:.} ii;_j ii;リ ル iレヽ
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
____
/ノ ヽ、_\
/( ○)}liil{(○)\
/ (__人__) \ なんだか面倒そうだお!
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } …そのうち良さが分かってくる
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j 2段階というのはこの2つ
ヽム:.} ii;_j ii;リ ル iレヽ
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
- 作業ツリーの状態をインデックス(キャッシュ) に記録する
- インデックスをオブジェクトとしてコミットする
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } 最初のステップは簡単
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j git-update-index を使うだけ
ヽム:.} ii;_j ii;リ ル iレヽ これはファイル名を引数に取ってインデックスに追加する
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
$ git update-index --add hello example
, '´ ̄ ̄` ー-、
/ 〃" `ヽ、 \
/ / ハ/ \ハヘ ちなみに --remove でインデックスから除くことができるんだよっ
|i │ l |リノ `ヽ}_}ハ.
|i | 从 ● ●l小N ここで .git/objects を見てみるのさ
|i (| ⊂⊃ 、_,、_, ⊂li|ノ
| i⌒ヽ j (_.ノ ノi|__/⌒)
| ヽ ヽx>、 __, イl |::::ヽ/.
| ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ
| ヾ_:::ッリ :::∨:/ | | >'''´
$ ls .git/objects/??/*
.git/objects/55/7db03de997c86a4a028e1ebd3a1ceb225be238
.git/objects/f2/4c74a2e500f5ee1332c86b94199f52b1d1d962
____
/ノ ヽ、_\
/( ○)}liil{(○)\ 意味不明なファイルができてるお!
/ (__人__) \ ハッカーの仕業に違いないお!!
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } オブジェクトはSHA1で記録されている
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j SHA1 に対して git-cat-file をすることで
ヽム:.} ii;_j ii;リ ル iレヽ オブジェクトがどのように格納されているか分かる
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
$ git cat-file -t 557db03de997c86a4a028e1ebd3a1ceb225be238
blob
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } -t オプションでオブジェクトの種類を表示する
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j blob というのはファイルの中身そのもの
ヽム:.} ii;_j ii;リ ル iレヽ 他にも tree,commit,tag とあるけどそれは後述する
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/ …git-cat-file の第1引数にオブジェクトの種類を渡すことで
_, ィr'´ヽ{ ___`} ヽ、_ オブジェクトの中身を見ることができる
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
$ git cat-file blob 557db03de997c86a4a028e1ebd3a1ceb225be238
Hello World
____
/⌒ ⌒\ ホジホジ
/( ●) (●)\
/::::::⌒(__人__)⌒::::: \ SHA1がファイルの中身を指してるってことかお
| mj |ー'´ |
\ 〈__ノ /
ノ ノ
, '´ ̄ ̄` ー-、
/ 〃" `ヽ、 \
/ / ハ/ \ハヘ
|i │ l |リノ `ヽ}_}ハ. ちなみにSHA1の指定は最初の数文字だけでもいいのさ
|i | 从 ● ●l小N git cat-file blob 557db03 でも大丈夫なんだよっ
|i (| ⊂⊃ 、_,、_, ⊂li|ノ
| i⌒ヽ j (_.ノ ノi|__/⌒)
| ヽ ヽx>、 __, イl |::::ヽ/.
| ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ
| ヾ_:::ッリ :::∨:/ | | >'''´
____
/⌒ ⌒\
/( ●) (●)\ インデックスができたんだからさっそくコミットするお!
/::::::⌒(__人__)⌒::::: \ 何なら有希ちゃんにコミットしてやってもいいお!!
| |r┬-| |
\ `ー'´ /
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ …その前に
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } 今のファイルに変更を加えてみて
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j それから git-diff-files
ヽム:.} ii;_j ii;リ ル iレヽ
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
____
/ノ ヽ、_\
/( ○)}liil{(○)\ またタンポポかお!
/ (__人__) \ さっさとコミットさせてほしいお!!
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
$ echo "It's a new day for git" >>hello
$ git diff-files
:100644 100644 557db03de997c86a4a028e1ebd3a1ceb225be238 0000000000000000000000000000000000000000 M hello
____
/ \
/ _ノ ヽ、_ \
/ o゚⌒ ⌒゚o \ こんなの読めるわけないお…
| (__人__) | git ユーザーは相当なマゾヒストに違いないお…
\ ` ⌒´ /
/.:.:. \
/:,:.:.: / ヽ \
/.:.l:.:.:/:/ :/ ', :l ヾ`ー
/!:.:.|:.: l/ 〃 / j } :| ハ
/イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l l } 普段はこんなコマンド使わない
N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j -p オプションで差分をパッチのフォーマットで見られる
ヽム:.} ii;_j ii;リ ル iレヽ
`ヘ:ゝ _ 小/
ヾ:{>、 _ ィ<}/|/
_, ィr'´ヽ{ ___`} ヽ、_
/| l:| | ===| |:l゙ヽ
/ | l:l l l l::l l
l ヽハ l l // |
____
/ノ ヽ、_\
/( ○)}liil{(○)\
/ (__人__) \ それなら最初かr…
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__)____
| ` ⌒/ ─' 'ー\
. | /( ○) (○)\
. ヽ / ⌒(n_人__)⌒ \
ヽ |、 ( ヨ |
/ `ー─- 厂 /
| 、 _ __,,/ \
$ git diff-files -p
diff --git a/hello b/hello
index 557db03..263414f 100644
--- a/hello
+++ b/hello
@p@ -1 +1,2 @@
Hello World
+It's a new day for git
____
/⌒ ⌒\
/( ●) (●)\
/::::::⌒(__人__)⌒::::: \ これなら見たことあるお!
| |r┬-| |
\ `ー'´ /
, '´ ̄ ̄` ー-、
/ 〃" `ヽ、 \
/ / ハ/ \ハヘ
|i │ l |リノ `ヽ}_}ハ. この結果を見れば分かる通り
|i | 从 ● ●l小N git-diff-files はインデックスと作業ツリーの差分を表示するのさっ
|i (| ⊂⊃ 、_,、_, ⊂li|ノ ちなみに git diff で git diff-files -p と同じことができるにょろ
| i⌒ヽ j (_.ノ ノi|__/⌒)
| ヽ ヽx>、 __, イl |::::ヽ/.
| ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ
| ヾ_:::ッリ :::∨:/ | | >'''´
$ git diff
diff --git a/hello b/hello
index 557db03..263414f 100644
--- a/hello
+++ b/hello
@p@ -1 +1,2 @@
Hello World
+It's a new day for git
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__)____
| ` ⌒/ ─' 'ー\
. | /( ○) (○)\
. ヽ / ⌒(n_人__)⌒ \ いちいちまわりくd…
ヽ |、 ( ヨ |
/ `ー─- 厂 /
| 、 _ __,,/ \
, '´ ̄ ̄` ー-、
/ 〃" `ヽ、 \
/ / ハ/ \ハヘ
|i │ l |リノ `ヽ}_}ハ.
|i | 从 ● ●l小N 次はコミットだよ!
|i (| ⊂⊃ 、_,、_, ⊂li|ノ インデックスを作るだけで一節終わっちゃったねっ
| i⌒ヽ j (_.ノ ノi|__/⌒)
| ヽ ヽx>、 __, イl |::::ヽ/.
| ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ
| ヾ_:::ッリ :::∨:/ | | >'''´