私の組織では、Googleのrepo
ツールを使用して、約200のgitリポジトリに広がるコードベースを維持しています。コンパイルとテストは非常に遅いので、私は通常、自分のLinuxマシンでそのソースツリーをチェックアウトしています(現在コンパイル中のものと、次のコミットを準備するもの)。Googleの「repo」ツールを使用して複数のチェックアウトを行うための共有オブジェクトストアですか?
これらのチェックアウトソースツリーは、(通常、各リポジトリの.git
フォルダに、しかしrepo
は、ソース・ツリーのルートで.repo
フォルダにこれをリダイレクト)5.5ギガバイトは、Gitのオブジェクトストアされた状態で、約7.5ギガバイト各消費実際の作業コピーでは2GBしかありません。だから私の質問です:どのように(簡単に)これらの異なるチェックアウトをオブジェクトストアを共有することができますので、オブジェクトストア内の各gitオブジェクトはハードディスクに1回だけ保存されますか?
これは個別のgitリポジトリの複数のチェックアウトで可能ですが、リポジトリのオブジェクトストアのリダイレクトがこれらのアプローチにどのように影響するかはわかりません。 gitはほとんどのオブジェクトを共有パックファイルに格納しているので、ハードリンクで重複したファイルを置き換えるだけでは機能しません。また、内部のオブジェクトが同じであっても異なるチェックアウト間で同じではありません。私がやっている何
基本的な設定では音が良いが、データの整合性はどうですか?通常のユーザ操作(例えば 'git pull')はgitのガベージコレクションメカニズムをトリガすることがあり、オブジェクトストアから*その作業コピー*に到達できないオブジェクトを排除します。gitに共有について通知せずにオブジェクトストアを共有すると、ガベージコレクションは1つの作業コピーでは到達不可能なオブジェクトを削除することはできませんが、他のものにとって不可欠なものです(例えば、コピーしたがまだプッシュしていない)? – Dreamer