web-dev-qa-db-ja.com

SVNをロックすることは良い考えですか

私は、1人のユニットから、世界中のプログラマーがいる分散型チームに至る、開発チームの新しい働き方を定義する必要があります。チームはsvnで動作します。これは交渉できないことです。 svnからgitに切り替えることをお勧めしますが、そうなることはありません。私がこのようなことをするのはこれが初めてです。現在、私は次のようなことを考えています。

enter image description here 白いテキストは手動で行われるものです。青色のテキストは自動的に行われるものです。

  • すべての開発者には独自のブランチがあり、このブランチで開発を行います。 (これは私の好ましい方法であり、私の調査ではこれも推奨されていることを確認しました。しかし、svnユーザーがこれを望まないこともよくありました。特に、長期的には、これはより実を結ぶと思います。あるいは、違いを過大評価していますか? ?)
  • 少なくとも毎朝、開発者が作業を開始する前に、トランクをブランチにマージします。
  • 通常の作業は、開始されたのと同じ日に確認する必要があります。さらに時間がかかる作業には、特別なブランチを作成する必要があります。このブランチには、少なくとも就業日の初めにトランクがマージされている必要があります。
  • 開発者がテストできるものを追加するたびに、ユニットテストを実行する必要があります。ユニットテストを実行する前に、自動マージが行われます。これにより競合が発生する場合は、解決する必要があります。
  • 開発者は、コミットできるものがあると思ったら、ユニットテストをコミットフラグで呼び出します。すべてがOKの場合、コミットおよびフォローアップアクションが実行されます。
  • マージとユニットテストが成功したかどうかをチェックする事前フックが定義されています。
  • コミットが正常に完了すると、ポストフックにより統合サーバーが作成され、上記のテストが再度実行され、統合テストが実行されます。特別なブランチではない場合:成功すると、このブランチで承認サーバーが作成され、ブランチがトランクにマージ(-再統合)されます。開発者には常に結果が通知されます。
  • 開発者は、自分のバージョンが正常にコミットされたときにのみ家に帰ることができます。理想的には、統合テストにも合格する必要があります。 (これは少し厳しいように聞こえますが、私はこれを追加しました。開発者がまだあまり変化しておらず、何週間も開発者がコミットしていないのを見たからです。これにより、すべてのマージの問題が発生しました。)

問題が発生する可能性のあるものを最小限に抑えることが重要であるため(問題が発生したときにサポートを提供する人は、おそらく必要なときにスリープ状態になるため、「すべてのコスト」で最小限に抑える必要があります)、svnトランクのロックについて考えています。コミット前と自動ステップが完了した後の解放。このように、「トランクへのマージ」が失敗することはほぼ不可能です。アイデアは、テストが適切に速く、コミットが完了するまで少し待つことをお勧めします。そうすると、自動部分が失敗する可能性があります。

これは許容できる作業方法ですか?
もしそうなら、これはsvnでできますか?

私が考えている作業方法の詳細

7
Cecil Westerhof

あなたが説明する作業の方法では、ブランチを使用する利点はほとんどありません。すべてが前後にマージされているので、コミットが統合テストを破る(できればまれに)ケースを除いて、Trunkで直接作業することもできます。すべての開発者が常にプライベートのローカル作業環境を持っていることに注意してください。これは、一種のブランチと見なすこともできます。

単一の(トランク/開発)ブランチでの作業はSVNでは一般的ですが、GITユーザーの間でより一般的なブランチベースの戦略を使用することもできます。分散VCSに依存する(または想定する)戦略のみがSVNで使用できません。

私の推奨は、開発者ごとに個別のブランチを手放し、小さな変更についてはTrunkで作業できるようにすることです。 SVNは、コミットする前に、必要なすべてのマージが実行されるように強制します。より大きな機能の場合、別のブランチを使用すると、進行中の未完了の作業から他のチームメンバーを分離するのに役立ちます。

(トランクへの)各コミットは引き続きCIテストの実行をトリガーし、CIシステムが問題を報告する限り、新しいコミットは行われないことに同意する必要があります(問題を解決するためのコミットを除く)。

これは私にとって非常に良い質問のようです。同じ問題もありました。

トランクベースの開発: を確認することをお勧めします。

1行の要約:

開発者が「トランク」と呼ばれる単一のブランチでコードに協力するソース管理ブランチモデル*は、文書化された手法を採用することにより、他の長命の開発ブランチを作成するというプレッシャーに抵抗します。したがって、彼らはマージ地獄を避け、ビルドを壊さず、そしていつまでも幸せに暮らしています。

0
gsl