やる夫で学ぶ gitcore-tutorial

Tagging a version


           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  …git のタグには
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      「軽い(light)」タグと
          ヽム:.} ii;_j    ii;リ ル iレヽ.    「説明つき(annotated)」タグの2種類ある
                `ヘ:ゝ   _     小/     
                  ヾ:{>、 _ ィ<}/|/      軽いタグというのは単にブランチと同じものと言っていい
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |
$ git tag my-first-tag
     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   このコマンドは HEAD を .git/refs/tags/my-first-tag というファイルに書き込むだけだよ!
  |i │ l |リノ    `ヽ}_}ハ.   
  |i | 从 ●     ●l小N   こうやっておくことであとからこの時点のコミットを参照できるのさっ
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/.  
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´
$ git diff my-first-tag
           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  こうすると後から今の時点との diff を見ることができる
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      
          ヽム:.} ii;_j    ii;リ ル iレヽ.   もちろん今は何も出力されない
                `ヘ:ゝ   _     小/     
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |

     ____  
   /      \
  /  ─    ─\    なるほど…。.git/refs/heads/* はコミットの度に新しいSHA1が刻まれるが
/    (●)  (●) \  tags/* にその時点でのコミットを保存しておいて
|       (__人__)    |  後から参照できるようにするということかお
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |  
  \ /___ /   


           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  説明つきタグは git のオブジェクト
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      
          ヽム:.} ii;_j    ii;リ ル iレヽ.   tree にコミットメッセージを付けて commit オブジェクトが生成されたように
                `ヘ:ゝ   _     小/     commit にメッセージや署名を加えて tag オブジェクトを生成する
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |
$ git tag -s <tagname>
     /⌒  ⌒\
   /( ●)  (●)\  またエディタが起動したお!
  /::::::⌒(__人__)⌒::::: \ ここにリリース用のメッセージなんかを書けばいいお?
  |     |r┬-|     | ZZ で保存だお!
  \      `ー'´     /

       ____
     /ノ   ヽ、_\
   /( ○)}liil{(○)\
  /    (__人__)   \ なんかエラーが出たお!
  |   ヽ |!!il|!|!l| /   |
  \    |ェェェェ|     /


     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   -s は PGP 署名をするから ちゃんと設定してないとエラーが出るかもね
  |i │ l |リノ    `ヽ}_}ハ.  -a でやれば署名をしないよっ
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/.  
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´


       ____
     /⌒  ⌒\  なんだお!
   /( ●)  (●)\  そういう事は先に言うお!
  /::::::⌒(__人__)⌒::::: \ 
  |     |r┬-|     | 
  \      `ー'´     /

$ git tag -a my-annotated-tag
     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   .git/refs/tags/my-annotated-tag は tag オブジェクトへの参照になっているはずだよっ
  |i │ l |リノ    `ヽ}_}ハ.  
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/.  
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´
$ git cat-file -t `cat .git/refs/tags/my-first-tag`
commit
$ git cat-file -t `cat .git/refs/tags/my-annotated-tag`
tag
           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.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  //  |


     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   これで git の 4種類のオブジェクトが全部出てきたね!
  |i │ l |リノ    `ヽ}_}ハ.  次はリポジトリの移動についてだよっ!
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/.  
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´