MercurialとEclipseを備えたプロジェクト機能サブモジュールのベストプラクティス?
-
27-09-2019 - |
質問
いくつかの異なるクライアント向けのアリプロジェクトがいくつかあります。私のプロジェクトのために私が持っているディレクトリ構造は次のようになります:
L___standard_workspace
L___.hg
L___validation_commons-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___old_stuff
| L___src
| | L___css
| | L___js
| | L___validation_commons
| L___src-test
| L___js
L___v_file_attachment-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___src
| | L___css
| | L___js
| L___src-test
| L___js
L___z_business_logic-sub-proj <- JS Library/Module
| L___java
| | L___jar
| L___src
| L___css
| L___js
L____master-proj <- Master web-deployment module where js libraries are compiled to.
L___docs
L___java
| L___jar
| L___src
| L___AntTasks
| L___build
| | L___classes
| | L___com
| | L___company
| L___dist
| L___nbproject
| | L___private
| L___src
| L___com
| L___company
L___remoteConfig
L___src
| L___css
| | L___blueprint
| | | L___plugins
| | | | L___buttons
| | | | | L___icons
| | | | L___fancy-type
| | | | L___link-icons
| | | | | L___icons
| | | | L___rtl
| | | L___src
| | L___jsmvc
| L___img
| | L___background-shadows
| | L___banners
| | L___menu
| L___js
| | L___approve
| | L___cart
| | L___confirm
| | L___history
| | L___jsmvc
| | L___mixed
| | L___office
| L___stylesheets
| L___swf
L___src-standard
動作中のコピー内で、モジュールはサブプロジェクトをマスタープロジェクトのJavaScriptディレクトリに配置された単一のJavaScriptファイルにコンパイルします。
例えば, 、ディレクトリ:
validation_commons-sub-proj
v_file_attachment-sub-proj
z_business_logic-sub-proj
...すべてが組み合わさ済み(コンパイルされたようなもの)を組み合わせて、 _master-proj/js
ディレクトリ;そして最後のステップで _master-proj
サーバーにデプロイされるようにコンパイルされています。
HGでこれをセットアップしたい方法に関して、私ができることは、マスタープロジェクトとそのサブプロジェクトを、自分のベースラインリポジトリからクライアントのワーキングコピーにクローンすることです。 、そのため、モジュールを(HGを使用して)特定の顧客の作業コピーに追加できます。
さらに、1つの顧客のワーキングコピーでバグにバグを変更/修正する場合、オプションで変更/バグ修正をマスタープロジェクト/サブプロジェクトのベースラインリポジトリに戻すことができるようにしたいと思います。最終的に、変更/修正を他の顧客の作業コピーに引き込み、修正する必要があるのと同じバグを含む可能性があります。
このようにして、私は異なるクライアントで同じバグ修正を利用できるようになります。
しかし...私はHGとEclipseを使用してこれを行う最良の方法が不確かです。
私 ここを読んでください HGを使用できること 拡張機能を変換します サブディレクトリを、 --filemap
オプション。
しかし、私はまだ、それを使用する方が良いかどうかについてはまだ少し混乱しています 拡張機能を変換します または、各モジュールを独自のリポジトリに収容し、各クライアントの単一のワークスペースにチェックアウトする方が良い場合。
解決
うん、それはように見えます サブレポス あなたが探しているものですが、それは間違った質問に対する正しい答えだと思います、そして私はあなたが同様に遭遇すると強く疑っています SVNを使用するときに発生する問題:externals
代わりに、私はあなたがあなたの組み合わせおよび模倣されたJSファイルに「公開」することをお勧めします アーティファクトリポジトリ そして、次のような依存関係マネージャーを使用します アイビー アーティファクトの特定のバージョンをマスタープロジェクトに引き込む。このアプローチにより、マスタープロジェクトが使用するサブプロジェクトバージョンをはるかに制御できます。
特定のクライアントのサブプロジェクトにバグ修正を行う必要がある場合は、そのサブプロジェクトのメインラインの修正を行うだけで、新しいバージョンを公開できます(理想的には 自動ビルドパイプライン)およびマスタープロジェクトを更新して、新しいバージョンを使用します。ああ、あなたは公開前に彼らのマスタープロジェクトで新しいバージョンをテストしたかったのですか?その場合、修正をプッシュする前に、サブプロジェクトをローカルに組み合わせて削除し、に公開します ローカルリポジトリ また、クライアントのマスタープロジェクトにテストのためにそのバージョンを選択してもらいます。