2011-01-13 13 views
6

Mercurialに関するワークフローに関する質問があります(他のDVCSにも該当する可能性があります)。バージョン管理:機能開発に関するバグ修正/コードの強化

repoは標準的なデフォルト/安定セットアップを使用して設定されます。

あなたは新しい機能を構築し、それが(月+)時間がかかると予想しています。この機能を使用している間は、後からすぐに修正して本番環境に適用する必要があると思われるバグに遭遇します。あるいは、おそらく、より良い文書化が可能なコードに気づいたでしょう。

私が前提としているのは、デフォルトで修正プログラムを作成してから、安定化して修正プログラムを手作業で(パッチを適用して)作成するということです。それは正しいですか、またはすぐに安定に切り替える必要があります、そこに変更を行い、デフォルトに安定してマージしますか?

パッチを使用するとわかりやすいようです。バグ修正のために特にコミットし、そのパッチを都合のよいときに適用することができます。私はバグがあまりにも厄介ではない場合、緊急性とあなたの流れを壊す必要はないことを意味します。右?

だから、どうやってこのような状況に対処していますか?

おかげで、あなたの小さな修正を行った後

+0

注:Wimはあなたが考えることができるチェリーピッキングの実行可能な代替案を提案しています。 – VonC

答えて

6

あなたは、分岐点(改訂B)に戻ってそこにバグ(改訂X)を固定し、その後、両方のブランチ(M1M2)に修正をマージすることができます:

-----B--o----o---M1----o---> stable 
    |  /
    |---------X bugfix 
    |   \ 
    \--o---o----M2----o-----> feature 

することができます。この道を通常のhg merge操作で各支店で修正を入手してください。パッチ適用、移植またはMQ'ingが必要ではありません。

さらに進んで、最初にバグを導入したリビジョンに戻ることができます。これを修正プログラムのベースとして使用することで、修正プログラムをバグが含まれているどのブランチにもマージできることを確認します。

+2

Huzzahは、 "どこで"あなたが変更を行うかを理解している人のために、変更そのものと同じくらい重要です。 –

+0

+1履歴の書き換えを避けるためです。 – VonC

+0

私は履歴を複製したくない理由を理解することができますが、単純な修正では、 "移植"がタイムラインをすばやく保つように見える最も簡単な方法です。マージがタイムラインを複雑にすることがあります。私はちょうど怠け者ですか? – jbarreiros

0

は、あなたがHg Transplant Extensionを使用して、別のブランチに同じ修正を報告することができ、コミット。

これが適切でない場合は、他のチェリーピッキングの可能性がSOの質問 "Mercurial cherry picking changes for commit"に詳述されています。

+0

VonCありがとう、移植の拡張機能はうまくいくでしょう。リンクありがとう。 – jbarreiros

+1

より良いワークフローでこれを避けることができます。下のWimのソリューションは、異なるハッシュIDを使用して同じ変更をリポジトリで2回実行することはないため、これが望ましい方法です。 2つの場所で同じ変更を行うと、それらの場所の最終的なマージはあまり自動化されません。 –

+0

@ Ry4an:私は同意します。しかし、もう一度、私はあまりにもGitのユーザーのような理由;) – VonC

関連する問題