私たちは非常に大きな古代のフラットCVSレポを以下のような形式で持っています。私は完全な歴史を持つ独自のgitリポジトリとして各サブディレクトリをインポートしました。'CVS時代'のレポをサブモジュール付きのgit repoに変換する
.
├── liba
├── libb
├── libc
├── prog1
├── prog2
└── prog3
3つのプログラムは、次のようにライブラリを使用することとしましょう:CVSはツリーの一部をタグ付けできるので
.
├── prog1
│ ├── liba
│ └── libb
├── prog2
│ ├── libb
│ └── libc
└── prog3
├── liba
└── libc
- 私たちは、バージョンタグを持つ各ライブラリやプログラムのリリースにタグを付けます。例えばliba_4x23
,prog3_2x22
。私たちは、ライブラリタグなしでプログラムの新しいバージョンをリリースした場合
我々はまた、リリース時に使用するライブラリのすべてのバージョン(すなわちliba_3x19
libc_7x88
)
でプログラムをタグ - タグは、プログラムの最も古いバージョンのままそれは使用された。
gitインポートの仕組みのために、実際にはプログラムの最新バージョンで終了します(それについて心配することはありません)。
Gitサブモジュールはこれに非常に良い解決策であるようですプログラムをチェックアウトして、適切なバージョンのライブラリをすべてサブモジュールとして取得します。
現在、すべての現在のプログラムはライブラリのリリースが異なるため、特定のバージョンでサブモジュールを改造する必要があります。
prog1
はlibb_4x50
prog2
とリンクされているlibb_4x70
が最新バージョンであると仮定すると、libb_4x70
とリンクされ、その後prog2
の例は、タグ付けされたlibb
を追加するそれでは、どのように簡単
git checkout prog2
cd prog2
git submodule add libb
.... done
ですバージョン付きched)4x50
〜prog1
?あなたは私たちもやりたいことが何
:-)より良いアイデアを持っている場合感謝
その他のアドバイスは、バックプログラムの3バージョンを移動して、各バージョンの適切なサブモジュールを設定しています。下位互換性のために、またどのように動作するかについて管理者の一例として。
ありがとうございました。 "サブモジュールの考え方は、親レポ内に特定のコミットを記録することです。"これはまさに私が望む結果です。それは私が思ったよりも簡単だった。 –