古いC/C++コードベースをMercurialに移行中です。私が見つけた例は.NETまたはJava用であるため、リポジトリ構造が最適に(または少なくともほぼ最適に)どのように見えるかについては少しわかりません。私の問題は主に、以前からずっと使用しているVC++ディレクトリの処理に関するものです。
currently, on disk:
\DEV
\include
\source
\lib
\static-link1.lib
\static-link2.lib
\static-link3.lib
...
\projects
\projA
\projB
\projC
...
\lib1-src
\lib2-src
\lib3-src
...
これが私たちが何も考えずにそれを行うことを私が見ることができる方法ですが、リンク(古い.libへのリンク)中にいくつかのバージョン管理/依存関係の問題が発生することを予測できます。\source
、この例\include
では、チェックアウトしたとき\static-libs
の古いグローバルVC++ディレクトリになります。
mercurial (alternative #1):
\repo: include
\repo: source
\repo: lib1-src
\repo: lib2-src
\repo: lib3-src
...
\repo: static-libs
\static-link1.lib
\static-link2.lib
\static-link3.lib
...
\repo: projA-prod
\repo: projA-dev
\repo: projB-prod
\repo: projB-dev
\repo: projC-prod
\repo: projC-dev
...
代替案#2へ。これはもっと良いでしょうか?サブリポジトリに移動して、サブリポジトリだけでプル/更新/マージを実行できますか?私がしたいのは、ライブラリの新しいバージョンだけで特定のプロジェクトの新しい本番ビルドを実行することだけです。この代替手段は、実際にはグローバル\lib
ディレクトリを削除し、代わりにプロジェクトごとに作成します。これにより、うまくいけば、もう少し柔軟になります。一方、コンパイルされたライブラリをチェックインするのはかなり間違っていると感じるでしょう。
mercurial (alternative #2):
\repo: include
\repo: source
\repo: static-libs (only for subrepos)
\repo: projA-prod
\subrepo: static-libs
\repo: projA-dev
\subrepo: static-libs
\repo: projB-prod
\subrepo: static-libs
\repo: projB-dev
\subrepo: static-libs
\repo: projC-prod
\subrepo: static-libs
\repo: projC-dev
\subrepo: static-libs
...
\repo: lib1-src
\repo: lib2-src
\repo: lib3-src
...
他のアイデアはありますか?どうしますか?過去4年間、主に.NETを使用してきましたが、これらのグローバル\source
/\include
フォルダーはもう好きではありませんが、完全に取り除く方法がわかりません。ソースを少し切り詰めたり、コードをlibsに移動したりして、これらの.h / .cppファイルのプロジェクト間の依存関係を最小限に抑えることは間違いなく可能ですが、単純なコードの再利用が必要です。
追加の質問:私は同じリポジトリを見ることができ\include
、\source
同じリポジトリにいることさえできました。それらはほとんどロックステップにあることを意図しているので、それはあなたがそれをどのように行うのですか?