Node: The Flying Fish Approach -- A Simpler Way To Do It, Next: , Previous: The Dovetail Approach -- Merging In And Out Of The Trunk, Up: Going Out On A Limb (How To Work With Branches And Survive)



The Flying Fish Approach - A Simpler Way To Do It

albeit slightly limiting ちょっと制限してはいますが

前述のものよりも少々制限はありますが、より簡単な方法があります。ブラン チ開発者はトランクがマージしている間開発を停止し、トランク開発者は今 までのブランチを置き換えるような全く新しいブランチを作成します。ブラン チ開発者はその新しいブランチに移り、開発を続けます。そのサイクルはブ ランチ開発が必要なくなるまで続きます。こんな感じになります(要約です。 今まで通り、jrandom@floss がトランクに、 qsmith@paste がブランチに 居ることにします):

     floss$ cvs tag -b BRANCH-1
     paste$ cvs checkout -r BRANCH-1 myproj
     

トランク、ブランチともに作業を始めます。そして開発者たちは協議し、ブ ランチをトランクにマージする時であると決定します:

     paste$ cvs ci -m "committing all uncommitted changes"
     floss$ cvs update -j BRANCH-1
     

ブランチでの変更が全てマージされます: ブランチ開発者はトランク開発者 がコンフリクトを解消し、コミットしてタグをつけ、新しいブランチを作成 するまで作業を停止します:

     floss$ cvs ci -m "merged from BRANCH-1"
     floss$ cvs tag merged-from-BRANCH-1
     floss$ cvs tag -b BRANCH-2
     

ここでブランチ開発者は自分の作業コピーを新しいブランチで上書きします; マージが起こった時には最新で、新しいブランチは古いブランチの変更が組 み込まれたトランクからのものですから、そうしても未コミットの変更を失っ たりしないのです。

     paste$ cvs update -r BRANCH-2
     

BRANCH-1 を BRANCH-2 に、BRANCH-2 を BRANCH-3 に置き換えて、 限りなくこのサイクルは続いていきます。

筆者はこれを トビウオ テクニックと呼んでいます。ブランチがたえ ずトランクから生え、短く伸びてはまたトランクへ再接合するからです。こ のやりかたの利点は、シンプルであること(トランクは常に指定されたブラン チの全ての変更をマージする)、それとブランチ開発者はコンフリクトを解 消しなくてもいいということです(新しくてきれいなブランチをただ渡され て、その上で作業すればいいのです)。欠点は当然、トランクのマージを実 施している間、ブランチ開発者はただ座ってボケっとしていなければならな いということです(解決すべきコンフリクトがいくつあるかによって、それ なりの時間がかかるでしょう)。あまり重要ではないですが、もうひとつ欠 点があります。それは、使われないノンブランチタグの代わりに、使われて いない小さなブランチがたくさんできることです。しかし、小さくて使われ ていないブランチがたくさんあっても気にならなくて、トラブルのないマー ジを期待しているのなら、トビウオは一番簡単なやり方になるでしょう。心 に留めておいてもいいと思います。

どちらのやり方を取るにしろ、分離状態は出来るだけ短い間にするよう努力 したほうが良いでしょう。ブランチとトランクをずっとマージしないままに すると、ただのテキストのズレだけでは済まず、意味上のズレに悩まされる ことになります。テキスト上のコンフリクトを起こす変更は簡単に解消でき ますが、テキストではなく考え方においてコンフリクトを起こすような変更 は、見つけるのも解決するのも大変です。ブランチを隔離するというのは、 開発者を自由にしますが、他の人の変更からしばらくの間でも遮蔽されると いうのは危険なことです。ブランチを使う場合は普段よりも活発にコミュニ ケーションをとるようになります。全員がお互いの計画を検討し、同じ軌道 に乗っているかどうか確認する必要があります。