2012-01-16 12 views
5

私はバージョンのアプリケーションを持っています。バージョン2.0で作業を開始する必要がありますが、同時にバージョン1.0のバグを維持して修正してください。Mercurialでプロジェクトの2つのバージョンで作業するためのワークフロー

1.0のバグフィックスは2.0リリースにマージされますが、新しい機能は2.0から1.0リリースにバックポートされません。

私はブランチの仕組みを理解していますが、同じ作業フォルダー内のブランチを切り替えることは現実的ではないので、両方のバージョンを同時に処理できる必要があります。私は同時に両方のバージョンのコードを実行できるようにしたい。

名前付きブランチを使用して同じアプリケーションの2つのバージョンを同時に使用できるようにするための標準的なセットアップまたはワークフローは何ですか? 1つのフォルダ内の1つのブランチと別のフォルダ内の別のブランチを使用して作業していますか?

2.0の新しいフォルダにリポジトリをクローンし、ブランチを2.0リリースのブランチに設定するだけですか?

私はMercurialの新機能ですので、ちょっと気にしないと私を許してください。

+1

試してみてください:http://nvie.com/posts/a-successful-git-branching-model/ GITを対象としていますが、Mercurialで動作します。あなたの問題に役立つかもしれません – PostMan

+0

私はあなたが示唆しているとおりに正確に行うでしょう:バージョン1.0とバージョン2.0の2つのコードをチェックアウト(クローン)してください。 –

答えて

7

バージョン2.0の新しいフォルダにリポジトリをクローンし、2.0リリースのブランチにブランチを設定するだけですか?

はい、メジャーリリースごとに別々のクローンがあれば問題ありません。ただし、主な開発はそれぞれon the default branchにして、メジャーリリースごとに名前付きブランチを使用する必要があります。私はワークフローを実行してみましょう:

バージョン1.0が完了したら、あなたは

$ cd ~/src/foo 
$ hg tag 1.0 
$ hg push http://your-server/foo 

を行うと、あなたは、バージョン2.0に向けてそのクローンでの作業を続行することができます。あなたは1.0のバグを修正する必要があることが判明した場合、あなたは

$ cd ~/src 
$ hg clone http://your-server/foo foo-1.x 
$ cd foo-1.x 
$ hg update 1.0 
$ hg branch 1.x 
$ hg commit -m "Starting 1.x branch" 
# now fix the bug... left as an exercise to the reader :) 
$ hg commit -m "Fixed issue123" 
# do QA to test the bugfix, make more commits as necessary 
$ hg tag 1.1 
$ hg push --new-branch 
# make a release 

--new-branchフラグはあなたがプッシュする最初の時間が必要なだけであるください。これはMercurialに、あなたが本当に歴史の中に新しい恒久的な支店を作りたいと伝えています。あなたは今、他のリポジトリにバグ修正を引くしたい

:1.xのシリーズのnamed branchを使用することにより

$ cd ~/src/foo 
$ hg pull http://your-server/foo 
$ hg merge 1.x 
$ hg commit -m "Merge with 1.1" 

、あなたは常にその枝の最新チェンジに行くためにhg update 1.xを使用することができます。 1.xを "フローティングタグ"と考えてください。このタグは、常にそのブランチの最も先端のチェンジセットを指しています。

このワークフローについては、standard branching wiki pageに記載されています。

+1

+1。デフォルトのMercurialでは、1.xブランチからの押し込みを強制するために 'hg push -f'が必要だと思うかもしれません。なぜなら、新しいヘッドを押すことになるからです。これは、強制的に"強制的に " 。単一の開発ラインでは、追加のヘッドは通常はマージによって処理されますが、これはここで欲しいものではありません。 – icabod

+1

@icabod:ありがとう、私は '--new-branch'フラグを忘れていました。これは '-f'のより制御された形式で、複数のヘッドをプッシュすることなく新しいブランチをプッシュできます。 –

+1

ああ、以前は '--new-branch'を使用していませんでした。おそらく' --new-branch'が動作しないような匿名のブランチを作成する厄介な習慣があるからです。 'ティソは名前のついた枝のために良い'。私は将来それを使用します:) – icabod

関連する問題