2

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を初めて使用するので、ここである程度意味があることを願っています。そうでない場合は、フォローアップの質問に積極的に回答するためにここにいます。どうもありがとうございました!

4

1 に答える 1

0

Lights / Television/etcブランチを定期的にマージする他のブランチを作成する必要があると思います。

それはもっともらしく聞こえます。

しかし、このマージには明らかな競合があります。

だからそれらに対処します。後でよりも早くそれを行う方が良いです。

ただし、テストブランチは、5つの自動化機能(ライト、テレビ、温度、シェード、音楽)をすべてレンダリングする必要があるため、ここで5を返します。そのため、テストブランチでの競合を一度修正してから、時間の経過とともにすべての機能ブランチからの後続の変更を統合し続けたいと思います。

なぜそれが対立であるべきなのか?

各機能に関数を呼び出して登録してもらい、機能の数を増やしてみませんか。関数を呼び出す機能がない場合、カウントはゼロです。それを呼ぶなら、カウントは1です。5人がそれを呼ぶ場合、カウントは5です。これは、ブランチごとに値が異なるハードコードされたカウンターをどこかに置くよりも優れているようです。

提案された分岐モデルに問題はありません。あなたが説明した唯一の問題はgitとは無関係であり、コード設計を改善することで解決できます。

しかし、すべての機能ブランチがTwitterの開発標準で規定されているリベースモデルを使用しているため、それができるかどうかさえ私にはわかりません。

何かが足りないかもしれませんが、なぜそれが問題なのかわかりません。自動化をアップストリームコードから定期的にリベースし、次に各機能ブランチを自動化から(アップストリームからではなく)リベースする場合、機能ブランチから自動化ブランチにマージして問題はありません。

于 2012-07-28T22:51:56.327 に答える