これはベストプラクティスの質問であり、答えは「状況によって異なります」と予想されます。もっと現実世界のシナリオとワークフローを学びたいと思っています。
まず、同じプロジェクトのさまざまな変更について話しているので、サブレポは使用しないでください。
hgリポジトリにコードベースがあるとしましょう。複雑な新機能Aの作業を開始すると、信頼できるテスターから複雑なバグBが報告されます(テスターがいますよね?)。
B(の修正)がAに依存している場合、それは簡単です。単純にci A、次にciBです。
私の質問は、彼らが独立しているときに何をすべきかということです(または少なくとも今はそう思われます)。
私は次のように考えることができます:
- Bには別のクローンを使用します。
- 同じリポジトリで、匿名または名前付きのブランチ、またはブックマークを使用します。
- MQを使用します(Aの上にBパッチを付けます)。
- 分岐MQを使用します(後で説明します)。
- 複数のMQを使用する(1.6以降)
1と2は、わずかに関連する質問からリンクされた@SteveLoshによる優れたブログでカバーされています。
1が他の選択肢よりも優れている点の1つは、ファイルが物理的に分離されて独立しているため、ある作業から別の作業に切り替えるときに再構築が不要なことです。したがって、たとえば、Aおよび/またはBがトライステートブール値を定義し、数千のCファイルにインクルードされているヘッダーファイルにアクセスする場合、これが実際に唯一の選択肢です(このようなレガシーコードを見たことがないことを教えてください)。ベース)。
3はおそらく(セットアップとオーバーヘッドの点で)最も簡単であり、Bが小さいか緊急の修正である場合は、AとBの順序を逆にすることができます。ただし、AとBが同じファイルにアクセスすると、注意が必要になる場合があります。AとBの変更が同じファイル内で直交している場合に適用できなかったパッチハンクを修正するのは簡単ですが、概念的にはまだ少し危険です。
4はめまいを起こす可能性がありますが、最も強力で柔軟性があり、スケーラブルな方法です。進行中のパッチにマークを付けてプッシュ/プルしたいので、デフォルトhg qinit
でを使用しますが、MQリポジトリでも分岐できることを理解するには概念的な飛躍が必要です。-c
手順は次のとおりです(mq = hg --mq)。
hg qnew bugA
; Aに変更を加えます。hg qref
mq branch branchA; hg qci
hg qpop; mq up -rtip^
hg qnew bugB
; Bに変更を加えます。hg qref
mq branch branchB; hg qci
- Aに再度取り組むには:
hg qpop; mq up branchA; hg qpush
非常に多くのステップを踏むのはおかしなことに思えます。仕事を切り替える必要があるときはいつでも、そうしなければなりませんhg qci; hg qpop; mq up <branch>; hg qpush
。ただし、これを考慮してください。同じリポジトリに複数の名前付きリリースブランチがあり、それらすべてに対して同時に複数のプロジェクトとバグ修正に取り組む必要があります(この種の作業には保証されたボーナスを取得する方がよいでしょう)。他のアプローチではすぐに迷子になります。
今、私の仲間のhg愛好家、他の/より良い選択肢はありますか?
(更新)qqueue
#4はほとんど時代遅れになります。ここでSteveLoshのエレガントな説明を参照してください。