Hatena::Groupmotememo

やる夫で学ぶ gitcore-tutorial/Copying repositories

やる夫で学ぶ gitcore-tutorial/Copying repositories

           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  git リポジトリの情報は全て .git ディレクトリに入っているから
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      プロジェクトのディレクトリだけで完結している
          ヽム:.} ii;_j    ii;リ ル iレヽ.   
                `ヘ:ゝ   _     小/     例えば CVS とは違って…リポジトリとワーキングツリーは同じもの
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |


       ____
     /⌒  ⌒\
   /( >)  (<)\  
  /::::::⌒(__人__)⌒::::: \  CVS なんて石器時代だお!
  |    /| | | | |     | 
  \  (、`ー―'´,    /
       ̄ ̄ ̄  


     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   実は .git ディレクトリ以外の場所に情報を格納することもできるんだけど
  |i │ l |リノ    `ヽ}_}ハ.  そんなことは今考えるべきことじゃないねっ!
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/. 
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´


     ____  
   /      \
  /  ─    ─\ 
/    (●)  (●) \ つまりプロジェクトのディレクトリを消したら
|       (__人__)    |  本当に全て無くなってしまうということかお…ちょっと怖いお
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |  
  \ /___ /  
$ rm -rf git-tutorial
     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   プロジェクトのコピーもディレクトリのコピーだけでできるんだよっ
  |i │ l |リノ    `ヽ}_}ハ.  
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/. 
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´
$ cp -a git-tutorial new-git-tutorial. 
           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  インデックスにはファイルの stat 情報も含まれているから
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      プロジェクトを移動・コピーしたときは
          ヽム:.} ii;_j    ii;リ ル iレヽ.   インデックスを更新する必要がある
                `ヘ:ゝ   _     小/     
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |



      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・
. | (●)   ⌒)\ パーミッションとかのことかお?
. |   (__ノ ̄  | とりあえず言われた通りにやっとくお
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |
$ git update-index --refresh
     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    
  / /  ハ/     \ハヘ   プロジェクトのコピーは別々のマシン間でも同じようにできるんだよっ
  |i │ l |リノ    `ヽ}_}ハ.  その場合、インデックスがどうなってるか分からないから
  |i | 从 ●     ●l小N   一度リセットするのがオススメにょろ
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/. 
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´
$ git read-tree --reset HEAD
$ git update-index --refresh
           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  これでインデックスの内容が HEAD と同じになる
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      ちなみにこれは git-reset で代用できる
          ヽム:.} ii;_j    ii;リ ル iレヽ.   
                `ヘ:ゝ   _     小/     
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |
$ git reset
       ____
     /⌒  ⌒\ ホジホジ
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \  簡単なほうのコマンドだけ教えてくれれば十分だお
  |    mj |ー'´      |
  \  〈__ノ       /
    ノ  ノ
           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.l:.:.:/:/   :/  ', :l   ヾ`ー
            /!:.:.|:.: l/  〃 / j } :|    ハ
        /イ:.:.i|:.:.jL∠/_/ | /l.ム_/| l  l }  …公開されている git リポジトリのほとんどが
         N:.ハ:.:.:lィfアト/ レ ィ=ト | /| ∧j      実際のファイルではなく .git ディレクトリを公開している
          ヽム:.} ii;_j    ii;リ ル iレヽ.   そういうリポジトリをコピーするにはこうすればいい
                `ヘ:ゝ   _     小/     
                  ヾ:{>、 _ ィ<}/|/     
           _, ィr'´ヽ{ ___`} ヽ、_   
         /| l:|   | ===|   |:l゙ヽ   
          /  | l:l   l     l   l::l l
           l  ヽハ    l    l  //  |
$ mkdir my-git
$ cd my-git
$ rsync -rL rsync://rsync.kernel.org/pub/scm/git/git.git/ .git
$ git read-tree HEAD
     /⌒  ⌒\
   /( ●)  (●)\  とりあえず .git ディレクトリを作って
  /::::::⌒(__人__)⌒::::: \ インデックスを HEAD と同期してるんだお!
  |     |r┬-|     | 
  \      `ー'´     /
$ git checkout-index -u -a
     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    上のコマンドでワーキングツリーにファイルをチェックアウトできるよ!
  / /  ハ/     \ハヘ   -u はあとから git update-index --refresh しなくていいようにインデックスを最新に保つ
  |i │ l |リノ    `ヽ}_}ハ.  -a は全部のファイルをチェックアウトするオプションなのさっ
  |i | 从 ●     ●l小N   
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/. 
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´


     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ これだけまわりくどいという事は
/      ∩ ノ)━・'/    必ずもっと簡単なコマンドがあるはずだお…
(  \ / _ノ´.|  |
.\  "  /__|  |
  \ /___ /


           /.:.:.         \
              /:,:.:.:  /   ヽ    \
          /.:.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 clone rsync://rsync.kernel.org/pub/scm/git/git.git/ my-git
$ cd my-git
$ git checkout
         ___
       / ⌒  ⌒\
      / (⌒)  (⌒) \   
    /   ///(__人__)/// \  
     |   u.   `Y⌒y'´    |  さすが git だお!
      \       ゙ー ′  ,/   うちに来て妹をファックしていいお!
      /⌒ヽ   ー‐    ィヽ   
      / rー'ゝ       〆ヽ   
    /,ノヾ ,>      ヾ_ノ,|
    | ヽ〆        |´ |



     , '´ ̄ ̄` ー-、     
   /   〃" `ヽ、 \    ちなみにさっき私が clone しようとしたら失敗したにょろ
  / /  ハ/     \ハヘ   そういう場合は git clone git://github.com/hotchpotch/yaruo.git でもしてればいいのさっ
  |i │ l |リノ    `ヽ}_}ハ.  
  |i | 从 ●     ●l小N   次はやっとブランチの作成だよ!
  |i (| ⊂⊃ 、_,、_, ⊂li|ノ    
  | i⌒ヽ j  (_.ノ   ノi|__/⌒) 
  | ヽ  ヽx>、 __, イl |::::ヽ/. 
  | ∧__,ヘ}::ヘ三|:::::/l| |',:::::ハ  
  | ヾ_:::ッリ :::∨:/ | | >'''´

やる夫で学ぶ gitcore-tutorial/Creating a new branch