やる夫で学ぶ gitcore-tutorial

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| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´