過去記事
git で個人プロジェクトは管理できているとする。
ストーリー
Bob が wonderland プロジェクトを開発している。貴方 (Alice) は Bob さんのプロジェクトを手伝う。
開発作業はかうなる。Alice は自分のリポジトリーに Bob のリポジトリーをコピーする。Bob 側で変更があったら、変更分を自分のリポジトリーに取り入れる (Subversion で言う所の svn update)。Alice が変更を加えたら、Bob に自分の変更分を取り入れてもらう (この作業は Bob が行なう)。Alice が Bob 側に変更分を投げつけることは (今回は) やらない。
Bob のリポジトリーは /home/bob/wonderland にあるとする。Alice は /home/alice/wonderland。
Pull を使う方法
まずは、リポジトリーのコピー。
$ cd ~ $ git clone /home/bob/wonderland
開発作業はいつも通り。
$ cd wonderland $ vi foo.txt $ git status ; 変更分をファイル単位で確認 $ git diff ; 変更分をコード単位で確認 $ git commit -a ; 変更分をコミット $ git log ; ログを見る
Bob の変更分を取り込む
$ git pull
Bob が Alice の変更分を取り込む
Alice はメールか何かで変更をしたことを Bob に伝える。Bob は次のやうにして Alice の変更分を取り込む。
$ whoami bob $ cd ~/wonderland $ git pull /home/alice/wonderland
Fetch を使う方法
pull を使う方法だと Bob の変更分だけ見たい時に困る。例えば Bob が危険な変更をここ 3 日間かけて行なっている。その変更分を取り込むのは時期尚早だけど、どう変更しているかは見ていたい。そういう時。
これは Fetch を使う。
$ whoami alice $ cd ~/wonderland $ git remote add bob /home/bob/wonderland $ git fetch bob From /home/bob/wonderland * [new branch] master -> bob/master
出来たブランチ名は bob/master。ブランチを確認してみませう。
$ git branch * master
自分のブランチに bob/master は出来ていない。
リモートのブランチを覗いてみる。
$ git branch -r bob/master origin/HEAD origin/master
bob/master が見つかった。
変更分の取得・参照
Alice は bob が変更を加えたという情報を入手した。さあ、変更分を見てみたい。まずは最新の Alice のリポジトリーを取ってくる。
$ git fetch
そしたら変更点を見てみましょ。
$ git log -p master..bob/master
Alice の最新ソース・コード一式が見たいなら、checkout する。
$ git checkout remotes/bob/master
この時、貴方 (Alice) は bob のリポジトリーを見ているだけなことに注意。編集とかしても反映されない。またこの状態で git fetch しても checkout したソース・コードには反映されない。一旦 master に戻って、もう一度 bob/master を checkout する必要がある。どうやら、これはあくまでスナップショットを見ているだけらしい。
マージする
Bob のリポジトリーが安定したとの話を聞いた。Alice は自分のリポジトリーに Bob の変更分を加える決意をする。
マージの方法は簡単。
$ git merge bob/master Updating 8ed0b02..1939699 Fast forward foo.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-)
もしくは pull を使う方法もある。
$ git pull . remotes/bob/master
No comments:
Post a Comment