Twitterの(魔法のようにオープンソースの)iPhoneアプリに、関連しているが独立した機能のセットを追加したいとします。アプリ内で「ホームオートメーション」を押すと、家の機能を制御するための画面一杯のボタンが表示されます。テレビ; 温度; シェード; と音楽。
この一連の機能を開発するためのGitの理想的な分岐モデルは何ですか?
ここにいくつかの仮定があります:
- 1人(同じ人)がすべての機能を開発します。
- Twitterは、統合モデルとしてリベースを推奨しています。
- すべての機能はいくつかの基本コードを共有しています。
そして、これが私の便利なモデルですが、すべてのモデルオプションを聞きたいです。
コードレビューアは、最後に各機能を個別にレビューするのが簡単なはずです。言い換えれば、Lightsコードをレビューする人は、Televisionの実装中に行われた変更に対処する必要はありません。
各機能には、開発中のすてきでクリーンな履歴が必要です。Lightsで作業しているときにfoo.mを見ると、Lightsを実装するために行われた変更のみが表示され、Televisionを実装するために行われた変更は表示されません。
テレビを散らかった/壊れた状態のままにしても、Lightsをコンパイルしてテストすることができます。
モデルの要件の1つは、ユーザーに提示されるのと同じように、すべての機能が統合されたテストビルドを定期的に生成できる必要があることです。つまり、テストビルドを実行すると、すべての機能を含むホームオートメーション画面が表示されます。
ここでの私の本来の本能は、次のようにブランチを設定することでした。
Twitter
\
Automation
\
Lights
\
Television
\
Temperature
\
...
つまり、Twitterから分岐して、「自動化」ブランチを作成します。このブランチには、機能にアクセスするための概要UIのスタブコードを含む、すべてのホームオートメーション機能が使用する共有コードが含まれています(つまり、「上記のボタン」)。次に、機能ごとに1つずつ、Automationから一連のブランチを作成します。
ただし、このモデルでは、この世界で完全に統合されたテストビルドを作成する方法を理解するのに苦労しています。Lights / Television/etcブランチを定期的にマージする他のブランチを作成する必要があると思います。しかし、このマージには明らかな競合があります。
たとえば、Automationブランチの共有UIコードに関数があるとします。num_buttons_to_render
これは、ホームオートメーションUIでレンダリングするボタンの数を返します。Automationブランチは、機能自体を実装していないため、ここでは0を返します。各子ブランチ(Lights、Televisionなど)は、それぞれ独自のワークフローを実装しているだけで、他の機能を気にしないため、1を返します。ただし、テストブランチは、5つの自動化機能(ライト、テレビ、温度、シェード、音楽)をすべてレンダリングする必要があるため、ここで5を返します。そのため、テストブランチでの競合を一度修正してから、時間の経過とともにすべての機能ブランチからの後続の変更を統合し続けたいと思います。しかし、すべての機能ブランチがTwitterの開発標準で規定されているリベースモデルを使用しているため、それができるかどうかさえ私にはわかりません。
私はgitを初めて使用するので、ここである程度意味があることを願っています。そうでない場合は、フォローアップの質問に積極的に回答するためにここにいます。どうもありがとうございました!