2008-09-11

Git で他の人と共同開発する

過去記事

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