18

コードベース(PHP)への変更要求で私たちを怒らせているクライアント(クライアントを持っている、クライアントを持っている)がいます。私たちの最初の対応は、SVN のメイン トランクで作業することだけでしたが、クライアントは頻繁に戻ってきて、特定の変更をできるだけ早くライブ サーバーにプッシュする必要があると要求しました。一方で、他の変更の優先度が突然低下します。これは、もともと他の変更とグループ化されていたものです (一見)。

変更リクエストごとにブランチを使用することを考えています。これは怒っていますか?他にどのようなソリューションが機能する可能性がありますか?

ありがとう!

編集:これは正しい答えを選ぶのが本当に難しい質問です。素晴らしい回答をありがとうございました。

編集:私が選んだベストアンサーが特に人気がなかったのは知っています。私も、この問題に対する技術的な解決策を見つけたいと思っていました。しかし、クライアントがモジュラー方式で展開できる機能を備えたソフトウェアを望んでいる場合、この問題はバージョン管理システムの使用では解決されないはずです。ソフトウェアに組み込む必要があります。

編集:ほぼ1か月後、同僚/クライアントは、複数のブランチが進むべき道であると私に確信させました。これは、クライアントの狂気によるものだけではなく、機能が「すぐに使える」か「さらに作業が必要か」などを判断できるようにする必要があるためです。私は SVN を持っていませんが、SVN クックブックからのアドバイスを使用してマージします。つまり、分岐されたリビジョンからのブランチをヘッド リビジョンにマージします。

また、このシステムを使用して、ある時点ですべてのブランチをマージし、それが新しい QA になり、ライブ ビルドになります。次に、そこから分岐します。

最終編集 (おそらく):数か月経った今でも、このシステムはうまく機能しています。チケットごとにブランチを作成し、問題が発生することはほとんどありません。一方で、人々が取り組んでいるものに関しては、物事を分けようとしています...

2 年後:現在 GIT を使用していますが、このシステムは実際には非常に合理的です。

4

11 に答える 11

19

おそらくここでの Subversion は、この仕事に最適なツールではありません。これらすべてのブランチを SVN で作成するのは安価ですが、それらを再マージするには時間がかかり、苦痛になる可能性があります。

SVN の代わりに GIT を見てみると、一般的にマージにおいてより強力なバージョン管理システムを見つけることができます。それに加えて、「さくらんぼ狩り」という特徴があります。つまり、単一のコミットを 1 つの開発ツリーから簡単に「選択」して、別の開発ツリー (ライブ ブランチ) に追加できます。また、GIT では、複数のコミットを 1 つのコミットにマージするのが簡単で便利です (別のツリーから特定のコミットに追加することもできます)。

したがって、単一機能のコミットを構築してから、それらを厳選することが解決策になる可能性があります。

于 2008-11-17T17:16:15.847 に答える
10

クライアントのライブ バージョン用のブランチ、新しい開発用のブランチ、進行中の変更用のブランチを作成するのはどうでしょうか。

タスクが殺到していないときは、新しい開発ブランチで作業してください。

進行中の変更ブランチで作業して、彼らがあなたを夢中にさせ続ける楽しいものをすべて修正しています。修正が完了したら、それを「ライブ」ブランチと「新規開発」ブランチにマージします。

そうすれば、クライアントのディストリビューションは独自の世界にあり、新しい開発は継続され (必要なときにいつでもマージできます)、メンテナンスもキャプチャされます。

私たちは新しい開発ブランチで作業し、パッチを作成することを決定するたびに、トランクをブランチし、Q/A のためにそのパッチを送信します。しばらく行ったり来たりする場合は、そのブランチで作業して問題を修正し、必要に応じてトランクにマージして、すべてが同期していることを確認します。以前のバージョンで対処する必要があったという事実よりもずっと後に何かが戻ってきた場合は、いつでもそのブランチで修正して戻すことができます。その後、トランクにマージするだけです。

于 2008-11-17T17:11:36.557 に答える
6

スレッド オープナーによって説明されるシナリオは、フィーチャーブランチパターンの例です。

これらは、メインの開発ライン (トランク) を安定させておく必要があり、メインラインを壊す可能性のある多くの機能を開発する必要がある場合に非常に役立ちます。

欠点は、さまざまなブランチをトランクと同期させておく必要があることです: 機能 A のブランチが開発中である間に、機能 B のブランチが安定した状態に達し、閉じられてトランクにマージされる可能性があります: この状況では、B ブランチによって導入された変更をトランクから A ブランチにマージする必要があります。したがって、ブランチを頻繁にトランクとマージして、追跡して解決する必要のある多くの競合を伴う、ブランチの寿命の終わりに独特の大きなマージという問題のある状況を回避することをお勧めします。

于 2008-11-17T17:57:44.000 に答える
3

すべての変更リクエストのブランチはやり過ぎのように聞こえ、後で問題が発生する可能性があります。

特定の変更セットがアプリケーションに論理的に関連する影響を与えることがわかるように、変更要求を論理的な領域にグループ化してみてください。これらのブランチを作成します。

ただし、質問に対する本当の答えは、 client を修正することだと思います。これらの恣意的な変更要求には費用がかかり、速度が低下する可能性があることを契約で明確にする必要があります。これが続けば、あなたの svn リポジトリはプロジェクトの最も厄介な側面になります。

于 2008-11-17T17:13:04.213 に答える
3

変更要求ごとにブランチを作成すると、追加の管理に対応するクライアントのコストが増加します。これは、この問題に対する適切なアプローチです。

時間、他の機能に取り組むために利用できるリソースなどの点でより多くの費用がかかりますが、多くの無関係な変更、または停止またはキャンセルされるプロジェクト機能がある場合、おそらくより良いアプローチの 1 つです。

これは実際には SCM システムに依存しませんが、Subversion は必要なことを確実に実行できます。

于 2008-11-17T17:15:22.993 に答える
2

テスト済みの作業中の変更ごとに分岐します。
バージョン リリースごとのタグ。
トランクで開発します。
繰り返す。

:)

于 2008-11-17T17:17:10.807 に答える
2

RELEASE ごとにブランチを作成します。できるだけ多くの変更を 1 つのリリースにまとめます。一般に、ブランチを増やすことは良いことです。ほとんどの場合、簡単に組み合わせることができますが、バラバラにするのは少し難しいです。

リリースごとにブランチがあるということは、現在本番環境にあるもの (または、マージ後、実際の展開前にリリースが保留されている場合にリリースされる予定のもの) のブランチもあるということです。

とにかくそれが私たちがしていることです。

于 2008-11-17T17:57:40.817 に答える
1

私の職場では、次のシステムがあります。

  • 安定ブランチ: これは、テストおよび検証済みの安定コードが進む場所です。
  • メンテナンス ブランチ: これは、安定版のバグ修正が行われる場所です。動作が確認されると、安定したブランチにマージされます。
  • プロジェクト固有のブランチ: 製品の各サブプロジェクトには 1 つのブランチがあります。年の特定の時期に、今年のリリースに含まれるすべてのプロジェクトが「リリース ブランチ」にマージされます。これは、リリースの 1 週間前にすべてのマージと作業が行われないようにするためです。
  • リリース ブランチ: これは、サブプロジェクトがマージされた後、現在のリリースのすべての厄介な開発が行われている場所です。リリース後に安定版にマージされます。
于 2008-11-17T17:41:06.950 に答える
0

プロジェクトの「ライブ」ブランチで多くの急速な変更を行う場合、コードが壊れる可能性を減らすために、しっかりしたコード レビュー プロセスが必要です。チェックインを行う前に、コードのレビューを行う必要があります。そのブランチからコア開発を遠ざけてください。

変更が承認されたら、変更をチェックイン (および/または作業ブランチからマージ) し、完了したら新しい「タグ」を作成できます。

于 2008-11-17T17:22:51.853 に答える
0

推定時間が 8 時間を超える場合は、ブランチを使用してください。

于 2009-01-10T12:52:20.793 に答える