他のレポジトリにある作業中でないブランチをコピーする
AliceとBobが居て,gitで協業しようとしている.
- Aliceは,$ALICE_WORKING/reposというディレクトリにレポジトリがあり,masterとcur_workingというブランチがあって,cur_workingというブランチで作業中(current working branchとでも言えばいいのかな?)である.
- Bobは,これから$BOB_WOKINGというディレクトリにAliceのレポジトリをコピーして作業を行うつもり.
で,このときBobがAliceのmasterブランチをコピーするにはどうするか?
ちなみに:
$ whoami Bob $ git clone $ALICE_WORKING/repos Initialized empty Git repository in $BOB_WORKING/repos/.git $ cd repos $ git branch * cur_working
となります.
さて…
自分が持つブランチには,まさに自分の作業場である「ローカルのブランチ」と「リモート追跡用ブランチ」があるそうです(らしいですよ).
「git branch」と打つとローカルのブランチの一覧が表示され,「git branch -r」と打つとリモート追跡用ブランチの一覧が表示されます:
$ git branch -r origin/HEAD origin/master origin/cur_working
ちょっとこいつにcheckoutしてみましょう:
$ git checkout origin/master Note: moving to "origin/master" which isn't a local branch If you want to create a new branch from this checkout, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new_branch_name> HEAD is now at …略 $ git branch * (no branch) cur_working
ローカルで付ける名前を考えて(
$ git checkout -b master Switched to a new branch "master" $ git branch * master cur_working
「git log」を見ると,オリジナルのものと同じ内容だった.
勘と表示されるメッセージでやってたけど,コピーはこれでOKのようだ.
git fetchとか
これまでの話は,おそらく「リモート追跡用ブランチにコピーしたい対象のブランチのイメージ(って言えばいいのかな?)が入っていた」からできたことだと思います.
ではイメージが無かったら?
「git fetch」を使うらしい.
$ git fetch origin refs/heads/master From $ALICE_WORKING/repos * branch master -> FETCH_HEAD
と「git fetch」を打つと,自分自身の「リモート追跡ブランチ」に「originにあるmasterブランチ」が格納されるそうです.
さっぱりですね,「refs/heads」って何でしょうか?
manにある
一応,適当に斜めに読むだけでもなんとか着いて行けている感じ…
gitは便利なんだろうけど,ちょっと癖がありますね…
注意
面倒なので適当に調べて書いています.間違っているかもしれないので注意.