環境:
- 7人の開発者
- 1 製品
- 3 つのブランチ:
- バージョン 3.6 (安定版)
- バージョン 3.7 (安定版)
- マスター(開発者)
ルールとポリシー:
- 以前のバージョンで行われた修正は、将来のすべてのバージョンでマージする必要があります。
- 統合は継続的です: 3.6 で何かを修正した場合は、プッシュする前に 3.7 とマスターで統合してテストする必要があります。
- 可能であれば、コミットする前に作業をリベースして、2 日前にローカルでコミットしたものが実際に一番上に戻るようにします。これは好みの問題であり、長所と短所があることは承知していますが、これがチームとして最も気に入っていることです。
私たちの問題:
無駄なマージ操作が多すぎます。シナリオは次のとおりです。
通常の統合作業:
- Joe と Bill は、3.6 で行われる 2 つの異なる修正に取り組んでいます。
- Joe が完了し、pull (および rebase) します
- Joe は 3.6 ブランチで最後にもう 1 回テストします。
- Joe は 3.7 に切り替え、3.6 をマージします -マージ 1
- Joe は、今度は 3.7 のコンテキストで再度テストします。
- Joe は 3.8 に切り替え、3.7 をマージします - 2 をマージします
- Joe は、今度は 3.8 のコンテキストで再度テストします。
- ジョーはプッシュする準備ができています
- ビルはほぼ同じことをしましたが、ジョーがプルした直後にプッシュしました
- ジョーはプッシュしようとしますが、新しい頭が作成されるため、操作は失敗します
面倒な (役に立たない) マージ:
- Joe がプルし、3.6、3.7、および 3.8 で Bill から情報を取得します。
- ジョーは 3.6 に更新し、プルから受け取った変更をマージします -マージ 3
- ジョーは 3.7 に更新し、プルから受け取った変更をマージします -マージ 4
- ジョーはまだ 3.7 マージ 3.6 -マージ 5
- Joe は 3.8 に更新し、pull - merge 6から受け取った変更をマージします。
- ジョーはまだ 3.8 マージ 3.7 -マージ 7
- Joe はプッシュを試み、その間誰も 3.6 にプッシュしないことを祈ります。
この種の状況を自動的にマージするための拡張機能 (またはバッチまたはプログラム) を作成することを考えています。したがって、Joe がプッシュできないことがわかった場合は、ただ走るだけMergeUpAutomagically
です。しかし、これを修正する前に、正しいワークフローを使用していることを確認したいと思います.