6

を使用してかなり大きなレポの履歴を書き直していますgit filter-branch --tree-filterが、数時間かかります。git が一時ディレクトリを使用して、進行中の中間作業を保存していることがわかります。中断された場合、書き換えを再開できるということですか?もしそうなら、どのように?

編集

私が行っている操作は、いくつかのディレクトリを移動することです。これらは現在サブディレクトリにありますが、ルートにある必要があります。

例えば

dir1
- dir2
- dir3
- dir4

になる

dir1
- dir2
dir3
dir4

もちろん、私のディレクトリ構造はそれよりもはるかに複雑ですが、それが私がやろうとしていることの要点です。

4

2 に答える 2

14

git filter-branch一時データを.git-rewriteフォルダーに書き込みますが、このディレクトリの内容に基づいて再開するための実際のサポートはありません。git filter-branch以前に中止された操作があったリポジトリで実行するfilter-branchと、その一時フォルダーを削除するように求められるか、--forceオプションを使用してそれ自体を実行します。

根本的な問題は、git-filter-branch大きなリポジトリでの実行が遅いことです。プロセスがはるかに高速である場合、再開を試みる動機はありません。したがって、いくつかのオプションがあります。

git-filter-branch を少し速くする...

  • RAM ディスクを使用する-git-filter-branch非常に IO 集中型であり、リポジトリが RAM にあると高速に実行されます。
  • --index-filterではなく使用--tree-filter- ツリーフィルターに似ていますが、ファイルツリーをチェックアウトしないため、高速になりますが、git index コマンドに関してファイルの変更を書き直す必要があります。
  • クラウド コンピューティングを使用し、RAM が高速でクロック速度の高いマシンを使用します (コマンドgit-filter-branch自体がシングル スレッドであるため、コマンドがマルチスレッドでない限り、複数のコアを気にしないでください) 。

...またはBFGを使用します(はるかに高速です)

BFG Repo-Cleanerは、よりシンプルで高速な代替手段です。git-filter-branch大規模なリポジトリでは、50 ~ 150 倍高速です。これにより、数時間かかる仕事が数分で済む仕事に変わります。

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

于 2013-04-22T18:22:04.457 に答える