以下で構成される大規模なプロジェクトがあります。
- A: C++ ソースコード / ライブラリ
- B: SWIG を使用した C++ ライブラリの Java および Python ラッピング
- C: Java API/ラッピングに依存する Java で書かれた GUI。
人々は可能な限りすべての方法でプロジェクトを使用します:
- C++ API を使用した C++ プロジェクト
- Java API を使用した Java プロジェクト
- Python スクリプト
- MATLAB スクリプト (Java API を使用)
- Java GUI 経由
現在、A、B、C はすべて単一の Subversion リポジトリにあります。git/GitHub に移行するため、再編成の機会があります。A、B、C をそれぞれのリポジトリに分割することを考えています。これにより、いくつかの疑問が生じます。
- Java と Python の SWIG ラッピング (つまり、インターフェース (*.i) ファイル) を別個のリポジトリーに分割することは理にかなっていますか?
- 現在、SWIG で生成された .java ファイルは GUI のソース ツリーに出力され、SVN で追跡されます。Git リポジトリでマシン生成ファイルを追跡したくないので、SWIG によって生成された .java/.jar ファイルに対する GUI の依存関係を維持する最善の方法は何ですか? これを考慮してください。新しい開発者が Java GUI を構築したい場合、A と B をゼロから構築する必要はありません。GUI をすぐに構築できる C のコピーを入手できるはずです。
- バージョン管理: すべてが 1 つのリポジトリにある場合、A、B、および C は必然的に互いに一貫性があります。異なるリポジトリがある場合、GUI は既知のバージョンのラッピングで動作する必要があり、ラッピングは既知のバージョンの C++ API で動作する必要があります。これを管理する最善の方法は何ですか?
私たちはこれらの質問のそれぞれについて深く考えてきましたが、コミュニティがこれらの問題にどのように取り組むかを聞きたいと思っています. おそらく git submodule/subtree はこれらの解決策の一部ですか? これらのいずれも使用していませんが、サブモジュールは人々に頭痛の種を引き起こしているようです. これらのいずれかで成功した例はありますか?