QA@IT

branchのマージの仕方

3148 PV

非常に初歩的なSubversionの質問です.

今までSubversionを使ってきましたが、正直なところtrunkにcommitするだけの使い方しかしていませんでした.単なるリリースを順に置いてゆくだけです.まあ開発も運用もそんなレベルで済んでいました.

しかし今はガラッと状況が変わりました.

  • ユーザーにリリースをすると、すぐに次のリリースに向かって少しスパンの長い開発を着手しなければなりません.
  • 同時にリリースで発生したバグのホットフィックスも同時に行わねばなりません.

このため、

  1. リリースしたらtagsにリリース時点のタグを作ります.
  2. 開発用のブランチをbranchesに作り、次のリリースに向けた開発はそこで行います.
  3. リリースで発生したバグはホットフィックス用のブランチをbranchesに作りそこでバグ修正をします.
  4. バグ修正が終わったらホットフィックス用のブランチをtrunkにマージします.

というようにしています.

質問ですが、2,の開発用ブランチは開発期間が結構長くかかります.このような場合、3.のホットフィックスのブランチと2,の開発用ブランチはどのように扱うのでしょうか?

困る点は、2.の開発用ブランチも3.のバグフィックスのブランチで修正したバグを含んでいるということです.

このような場合、
① 3.のバグフィックスのブランチを2,の開発用ブランチにマージするのでしょうか?(そもそもそういうことは出来るのでしょうか?)
② それとも開発用ブランチが完成してからバグフィックスを吸収済みのtrunkにマージしておしまいというようにするのでしょうか?

まともにSubversionを使っていないため、考え違い/無理解があると思いますが、よろしくお願いいたします.

以上

回答

やり方はプロジェクト次第とは思いますが一例として、

trunkがあり、
仮にリビジョン10にタグを打ってそこが最新リリース版としたとして、

開発ブランチ(仮に dev)をrev10から作成(svn copyでしたっけ?)。
そっちはそっちで伸びている最中、

リリースバージョンにバグが発覚して、Fix用のブランチ(仮に hotfix)をrev10から作成。
hotfixは修正内容をコミットしてテストして成果を trunkにマージすることになりますよね?(rev20でマージしたとします)
その状態を、devブランチから見れば自分の親である trunkのバージョンが一つ進んだだけだと考えたとします。hotfixブランチはあくまで trunkを不用意に伸ばさず修正作業を行うための作業場にすぎないので、devにとっては関係ないという考え方です。

rev:   10  11  12  13 ・・・ 20
trunk   o ーーーーーーーーー-o 
          \ 
dev         o ーo ーo 

この場合 devにとってベースとすべきソースに更新が入ったわけですから、trunk 「から」 devに修正内容をマージして、devでも問題ないことを確認(または必要があればその修正を取り込めるようにdevを修正)して開発を進めていき、開発完了したらtrunkにマージすればよいと思います。

rev:   10  11  12  13 ・・・ 20
trunk   o ーーーーーーーーーーo ーーーーーーーー-o 
          \                    \             /
dev         o ーo ーo --ーーー-o ーo  ・・o  ←開発終了

個人的にはこれが素直な形じゃないかと思います。

編集 履歴 (1)
  • flied_onionさん、毎回お世話になります.的確な回答ありがとうございました.理解できました.
    後付けですみませんがGitHubも同じ考え方でよろしいでしょうか?会社はSubversionなんですが、オープンソースで公開するものはGitHubを使っています.で、同じ状況になっています.
    -
  • 返答が遅くなってすいません、GitHubはサービス名です。Gitのことでしょうか?GitやMercurialといったDVCSでも考え方は同じです。ブランチ側に影響がでるような修正が親ブランチで発生したのであれば変更を取り込めばいいと思います。Topicブランチでも同様と思います。 -
  • flied_onionさん、回答ありがとうございました.GitHubでもさっそく試してみたいと思います.
    > GitHubはサービス名です。Gitのことでしょうか?
    はい、確かにそのとおりでした.

    以上
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。