単なるメモ
- repo でクローンする場合は、
git init
のあとにリモートを設定して、git fetch
している - その際にgitオブジェクトはフェッチしたプロジェクトの
.git
ディレクトリーではなく、.repo/project-objects
ディレクトリーの下に リモートの名前、プロジェクトのディレクトリーから計算されるディレクトリーに Git オブジェクト専用の.git
ディレクトリーが作られる - 上記のGit オブジェクト専用のディレクトリーへは Git 標準仕様にある
objects/info/alternates
というファイルをもって参照することでディレクトリーを解決する - サブマニフェスト構成のマニフェストにおいて、同じプロジェクトが同じリモート、ディレクトリーに配置される場合、同じ Git オブジェクトのディレクトリーを参照するので、フェッチの通信量を抑えられる
- すでに一度
repo sync
した後で、リモート名を変更すると、プロジェクトの.git
ディレクトリーを破棄して新しい.git
ディレクトリーを作成し、Git オブジェクト専用の.git
ディレクトリーも新しいものを作成する- 古い Git オブジェクト用
.git
ディレクトリーは破棄しない
- 古い Git オブジェクト用
- 古いバージョンの
repo
では、サブマニフェスト構成で複数のサブマニフェストが同じプロジェクトを同じリモートから同じパスで取得してる場合に、上記のディレクトリーの作り直しが失敗するケースがある(v2.41 以前)