2017-01-13 10 views
-2

ソフトウェアリリースの要件についてまず教えてください。ソフトウェアの新しいバージョンを年に2〜3回リリースする必要があります。新しいリリースには新機能が含まれています。新しいバージョンがリリースされた後、このリリースは、修正が必要なバグがある場合に備えて、かなり長い時間(数年を言いましょう)維持する必要があります。このようなバグが発生した場合は、通常、これらのリリースのいくつかで修正する必要があります。ただし、これらのリリースには新機能を移植しないでください。gitの複数のブランチで特定の変更を簡単に追跡する方法は?

現在のところ、私たちはVCSとしてbzrを使用しています。これは不愉快で遅く、一般的なビルドサーバではサポートされておらず、(すべてのブランチが独自のディレクトリを使用しているので)たくさんのディスクスペースを使います。

だから我々は、我々はgitのに切り替えたいことを決めました。次の分岐モデルを計画しました:masterは、すべての新機能が(機能ブランチを介して)入ります。新しいリリースが必要な場合は常に、新しいブランチ(たとえばrelease30)が作成され、テストのためにQAに渡されます。これらのリリースブランチは、masterにマージされることはありません。しかし、masterのバグ修正は、これらのブランチに適用する必要があります。チェリーピッキングこれらのバグ修正はテストされ、この必要性を満たす。

しかし、私の上司は、新しいVCSには次の(非常に合理的な)要件があります:特定の変更について、彼はこの変更が適用されたリリースブランチを迅速かつ容易にチェックしたいこの特定のバグ修正がこの顧客のリリースに含まれているかどうかを迅速に顧客に伝えることができます。 1回のクリックでGUIにすることをお勧めします。チェリーピッキングで

、これは困難です。 チェリーピッキングはcherry-pick -xで実行され、チェリーピックされたコミットのハッシュがコミットメッセージに追加されます。変更はgit log --all --oneline --decorate --grep=<SHA-Hash>で検索できます。もちろん、これにはコマンドラインの使用が必要です。エイリアスを使用してコマンドを短縮することができます。

質問: 1.私は上記の投稿を1よりも、この問題へのより容易な解決策はありますか? 2. Linuxでこのような機能をサポートするGUIはありますか? 3.このような状況(複数のロングライフリリースブランチ)では、どの変更がどこに含まれているかをどのように把握していますか?

答えて

0

考えがあります。

アイデア:移行後、すべてのリリースブランチをブランチリリース/ 21の先のリリースブランチ:git merge -s ours release/20にマージします。このように、これらのブランチは、release/20からの変更を導入することなくマージされます。

リリース/ 20にバグフィックスが含まれていれば、リリース/ 21に含まれる必要があります。ブランチリリース/ 21には簡単なgit merge release/20です。競合がある場合、それらはマイナーで管理しやすいものでなければなりません。

トラッキングが非常に簡単になりました。「バグ修正XはリリースYですか」は、 "コミットXで導入されたバグ修正は、ブランチYが指しているコミットの前身ですか?"と同等です。この質問は、GUIとコマンドラインの両方で簡単に答えることができます。

0

あなたは私がPreissel & Stachmann(それは英語で利用可能であるかどうかわかりません)によるGitの本の中で、この問題に対する答えを見つけて、「A +成功+ Gitリポジトリ+ +モデルを分岐」

+0

あります。しかしDriessen氏が提示したモデルは、私たちのニーズを満たすものではありません。そのモデルにはいくつかの "マスター"ブランチが必要です。 – mave117

+0

@ mave117経営ネーミングの問題のように、 "他の名前のバラ..."の行に沿っているようです。おそらく(*)DVCSでは、完全な複製があるので、「マスター」は存在しないはずです。 Veracityは、ローカルアーティファクトのsha1によって証明されています。 '古いマスター' https://news.artnet.com/art-world/how-do-experts-arrive-at-an-opinion-about-artwork-authenticity-323652。 –

関連する問題