注: 私の質問は、特定の問題(Liferayを含む)に焦点を当てていますが、gitで同じプロジェクトのさまざまなバージョンを維持する必要がある人にとって役立つことを願っています。
私はLiferay Portalの多くのプラグインを書いている会社で働いています。これらのプラグイン(ポートレット、テーマなど)は通常再利用可能であり、もちろん、ポータルの新しいバージョンに合わせて更新する必要があります。
しかし、移行する必要があり、私たちは、言うのLiferayの新バージョンへのポートレットせることが通常であるとその前のバージョンを維持します。また、一部のクライアントに対して非常に具体的なカスタマイズを作成する必要が頻繁にありますが、これは「メインバージョン」に追加しても意味がありません。
これらの要件により作業が複雑になりますが、幸いなことに、いくつかの単純化を想定できます。たとえば、プラグインは一度に1人のプログラマのみが頻繁に更新します。プラグインに複数の機能を同時に追加することは非常にまれです。
現在、Gitoriousに移行しています。このようなシナリオの分岐モデルを考えています。
私のモデル
私が提案したのは:
- 各プラグインには、プロジェクト内のGitoriousに独自のリポジトリがあります。たとえば、子猫を表示するためのポートレットには
kittens-portlet
、liferay-portlets
プロジェクト内にリポジトリがあります。 - 新しいプラグインを作成するときは、Liferayバージョンに応じて名前が付けられたブランチ(たとえば、
lf5.2
)に作成します。 - プラグインで更新が行われるたびに、更新は本番環境で承認およびデプロイされ、プラグインにバージョン(たとえば
lf5.2v1
、lf5.2v2
など)のタグが付けられます* - プラグインをLiferayの新しいバージョンに移植するたびに、最新バージョンをブランチします(たとえば、ブランチを作成し
lf6.0
ます)。 - 本番環境に入ると、新しいブランチのヘッドはなどのタグを受け取り
lf6.0v1
ます。 - クライアント固有の方法でプラグインをカスタマイズする必要があるたびに、クライアントの名前でブランチを作成します(たとえば、
lf5.2clientcorp
クライアント「ClientCorp Inc.」のブランチを作成します)
これは通常とは異なるモデルですmaster
。マージされないブランチはまったくなく、多くあります。これは、そのようなモデルを持つリポジトリが次のように見えると思う方法です:
友人がこのシステムをかなり複雑でエラーが発生しやすいと感じました。彼は、優れた人気のあるVincent Driessenモデルを提案しました。もちろん素晴らしい(そしてテスト済み!)が、私たちの状況には複雑すぎるようだ。
私の友人のモデル
次に、彼は別のモデルを提案しました。Liferayバージョンの各プラグインのリポジトリを作成し(したがって、を作成しkittens-lf5.2-portlet
、次にを作成しますkittens-lf6.0-portlet
)、それぞれにmaster
ブランチとdevelop
ブランチがあります。これmaster
により、いつでも展開の準備が整います。(それとも、他の方法で回避することが、可能性master
とstable
によって示唆されているように、スティーブLosh)。
これは非常に簡単ですが、私はこのシステムが好きではありませんでした:
- その結果、プロジェクトに膨大な数のリポジトリが作成され、Gitoriousの閲覧が困難になる可能性があります。
- プロジェクトのディレクトリの名前が関連しています。誰かがリポジトリを
kittens-lf6.0-portlet
ディレクトリにクローンし、antを使用してWARを生成する場合(通常どおり)、WAR名kittens-lf6.0-portlet
も同様になります。このポートレットの古いバージョン(kittens-portlet
たとえば、名前が付けられている)は、アップグレードされたポータルでは異なる(おそらく欠落している)ポートレットと見なされます。少し注意すれば回避できますが、回避したいです。 - 同じプラグインの異なるバージョンは別々に維持されます。私は私の心を壊します:(
kittens-lf6.0-portlet
リポジトリのい名前だと思います。
私は、2つの最後のポイント-これも2つのより主観的なポイント-が私の不本意の主な理由だと思います。それにもかかわらず、すべての4つの異議が立っています。
OTOH、私自身の提案は私には奇妙に思われ、それに隠されたバグがあるのだろうかと思います。OT3rdH gitは非常に強力で柔軟性があるため、その可能性を探ることに恥ずかしさは感じないと思います。
だから、私は尋ねます:
- 最高のモデルは何でしょうか?わたしの提案?友達のモデル?今では伝統的なビンセント・ドリーセンのシステムですか?
- 他にどのような分岐モデルを提案しますか?
- 私のモデルが悪いと思うなら、なぜそう思うのですか?私は欠点と盲点が何であるかを学びたいです。
*実際には、次のようなバージョンでコミットにタグ付けすることを好みますv1
が、どうやらgitのタグはブランチ内でスコープされていません-つまり、1 つのv1
タグlf5.2
ともう1つのタグを持つことはできませんでしたlf6.0
ので、ブランチ。それは正しいですか?