1

かなり大きなリポジトリ(11 GB、900,000以上のファイル)があり、妥当な時間内に反復するのに問題があります。少しプロファイリングした後、本当のボトルネックはgitupdate-indexのようです。

$ time git update-index --replace $path > /dev/null

real    0m5.766s
user    0m1.984s
sys     0m0.391s

そのため、ファイルのリストを取得するのに耐えられない日数になります。update-index操作を高速化する方法はありますか?

その価値については、Windows7でcygwinを実行しています。

編集:質問により多くの文脈を置くため。

大規模なリポジトリはSVNインポートからのものであり、リポジトリに含めるべきではない多数のバイナリが含まれています。ただし、コミット履歴とコミットログを保持したい。そのために、バイナリの内容をファイルハッシュに置き換えようとしています。これにより、リポジトリが圧縮され、履歴を保持できるようになります。

4

1 に答える 1

3

Git リポジトリから大きなファイルを削除するために特別に設計されたBFG Repo-Cleanerを使用したいと考えています。git-filter-branch

BFG jarをダウンロードして(Java 6 以降が必要)、次のコマンドを実行します。

$ java -jar bfg.jar  --strip-blobs-bigger-than 1MB  my-repo.git

サイズが 1MB を超える (最新のコミットに含まれていない) ファイルは、Git リポジトリの履歴から削除され、元のファイルの古い Git ハッシュ ID.git-idを含むファイルに置き換えられます (これは、質問のファイルハッシュ要件を持つバイナリ)。

git gc次に、デッド データを消去するために使用できます。

$ git gc --prune=now --aggressive

BFG は通常、実行よりも 10 ~ 50 倍高速でありgit-filter-branch、オプションは次の 2 つの一般的なユースケースに合わせて調整されています。

  • 非常に大きなファイルを削除する
  • パスワード、資格情報、その他の個人データの削除

完全な開示: 私は BFG Repo-Cleaner の作成者です。

于 2013-04-16T08:24:08.667 に答える