質問
私のチームは最近、ほとんどのSubversionリポジトリレイアウトに典型的な「トランク」ブランチを使用しないことにしました。いつでも、トランクが他のリポジトリで保持する伝統的な役割で機能する特定のブランチが常にあることがわかりました。つまり、私たちは常に、私たちが取り組んでいる次のリリースを表す最高の数のブランチを持っています。したがって、トランクへのマージは単に余分なものであるため、トランクを取り除きました。
他の誰かがこれをしますか?
もしそうなら、あなたは長所/短所に気づきましたか?
あなたのチームがこれをしていなくても、誰かがこのレイアウトについて何か考えを持っていますか?
解決
あなたはについて話している プロモーションモデル - Perforceの論文は、それに関する問題を強調しています - コードラインの変化する役割を伝え、枝間で作業を移動します。
リストされている問題についての私の見解に関する拡張:
1)コードラインのポリシーの変更:
すべてのコード行には、書き留められて正式化されているか、開発者の頭に完全に暗黙的であろうと、ポリシーがあります。それは例を定義します:
- 誰がコード行にコミットすることが許可されていますか
- どのくらいのテストが必要ですか(例:ユニットテストに合格する必要があります、回帰テスト、完全なシステムテスト)
- レビューの変更をコーディングする必要がある人の数
- どのような変更が許可されていますか
トランクアプローチを使用すると、ポリシーが固定されたままであるため、書き留めやすくなり、通信が容易になります(より大きなチームではより重要です)。
例:トランク:
- 開発者はすべてコミットできます
- 変更
- ユニットテストは合格する必要があります
- コミット後のコードレビュー
バージョンブランチ:
- メンテナンス開発者のみ
- バグ修正のみ
- ユニットテスト +回帰テスト
- コミット前の他の2人の開発者によるコードレビュー
タグブランチ:
- 作成後はコミットしません
開発者のプライベートブランチ:
- 開発者のみがチェックインします
- 変更
- トランクに合流する前にのみテストが必要です
- トランクに合流する前のコードレビュー
プロモーションモデルがある場合は、メイン開発中に1つのポリシーがあり、リリースの準備中にポリシーを変更するときに全員に伝えなければなりません。
プロモーションモデルは簡単に入ることができ、非ソース制御の動作方法に直接マップします。しかし、大規模なチームを獲得し始めると痛いです。
Linuxカーネルの開発を見ると、プロモーションモデルとトランクモデルの間のひずみがわかります。Linusのツリーはプロモーションです - マージウィンドウとRC/安定化期間の間のサイクルを通過します。しかし、Linux -Nextと-MMが飛び出して、よりトランクのようなラインを提供しました。
とにかく、分散されたSCM/VCは多少異なります。それぞれの開発者には独自の木があり、必要に応じて変化を引き出すため、ポリシーをすべての開発者に配布する必要はありません。
オープンソースプロジェクトは、トランクから分岐した後、リリースを安定化するというドラッジの仕事を人々に強制することができないという問題に苦しんでいます。したがって、プロモーションモデルは、機能に取り組むだけでなく、安定化の取り組みを強制する方法としてより重要です。
2)動きの仕事:
開発者は、バグフィックスの変更のみに取り組んでいるラインのポリシーのみが機能に取り組んでいる可能性があり、現在、彼は作業コピーを別のコードラインに切り替える必要があります。これは、使用中のSCMシステムに応じて、簡単なものから非常に困難なものまでどこでもあります。開発者がトランクに取り組んでいる場合、この問題は常にトランクに行くため、この問題は発生しません。開発者がプライベートブランチまたは機能ブランチにいる場合、彼らの作業はトランク(およびリリース)にのみ衝突します。
機能が既にチェックインされているが、現在入っているバージョンから遅れている場合、削除する方法を解決する必要があります。この問題はまだトランクモデルに存在しますが、解決が少し簡単かもしれません - リリースのためにトランクからのチェリーピッキング。これは、機能ブランチが役立つ場所ですが、統合コストがあります。
他のヒント
Perforce Paperでの私の問題は、主な利点に言及することなくプロモーションモデルを拒否し、オーバーヘッドのマージを減らすことです。実際、この論文は、「メインラインモデル」は「追加の管理オーバーヘッドを課さない」と誤って主張することを誤って述べています。 「常にトランクに合併する」モデルは、まさにそれを意味します - あなたは全員がマージしなければならないというオーバーヘッドを持っています。これは、次の状況(私たちが持っている)がある場合、無意味なオーバーヘッドです。
a) 小さなチーム(5〜7人の開発者)はすべて、お互いの叫び距離内にあります。私たちがブランチを作る必要があるとき、コミュニケーションは問題ではありません
と
b) 実際には2つの主要な支店のみがあるコードベース - 制作ブランチと「開発における次のもの」。たぶん、ブルームーンに一度3つあります。
私のポイントは、それは状況的なことだと思います。 「プロモーションモデルには問題がある」と言うのは、「または/mを使用しないでください」と言うようなものです。それはあなたの環境に依存します。
Subversionは両方のアプローチを許可します。トランクは必需品ではなく、慣習です。あなたがそれを持っている場合、いくつかのツールはより簡単に動作します(たとえば、GITの移行ツール)。あなたがそれを持っていないなら、あなたは手動でいくつかのことをしなければなりませんが、私はあなたの日常の仕事の間にあなたが気づく何かを考えることができません。
私は最近、Subversionリポジトリにあるプロジェクトの作業を開始しました。リポジトリを作成した人は、特定のレイアウトに従わなかった - リポジトリのルートにすべてを詰めただけです(トランク/、分岐/、タグなし/)。私は作業するブランチと他のもののためのいくつかのタグを作成したかったのですが、適切なレイアウトに従わないSubversionリポジトリでそれを行うことがどれほど難しいかを認識しました。
私たちはそうします - ある種。トランクは使用しませんが、プロジェクトのリリースごとに新しいブランチを作成します。この「タグ付き」ブランチは、各バージョンのトランクであり、変更を古いリリースにマージすることでバグフィックスをバックポートします。
それは私たちにとってうまく機能しますが、私たちのプロジェクトには多くのサブプロジェクトがあります。
IME、一部の環境では、トランクは修正と変更を交換するのに適した場所です。つまり、誰もが修正をマージします に トランク、そして誰もが他の人の修正をマージします から トランク。多くの独立したプロジェクトの間で多くのコードが共有され、これらすべてのプロジェクトが共有コードに貢献した環境で非常に役立つことがわかりました。
ただし、環境は異なる場合があります。