11

git コミット履歴から大きなバイナリ ファイルを削除する方法についていくつかの スレッドを読みましたが、私の問題は少し異なります したがって、ここでの私の質問は、手順を理解して確認することです--

私のgitリポジトリは~/foo. すべての *.jpg、*.png、*.mp4、*.ogv (など) をリポジトリ内のディレクトリの 1 つ、特に~/foo/public/data.

ステップ 1. ファイルを削除する

~/foo/data > find -E . -regex ".*\.(jpg|png|mp4|m4v|ogv|webm)" \
    -exec git filter-branch --force --index-filter \
    'git rm --cached --ignore-unmatch {}' \
    --prune-empty --tag-name-filter cat -- --all \;

ステップ 2. バイナリ ファイル拡張子を .gitignore に追加し、.gitignore をコミットします。

~/foo/data > cd ..
~/foo > git add .gitignore
~/foo > git commit -m "added binary files to .gitignore"

ステップ 3. すべてプッシュ

~/foo > git push origin master --force

私は上記の正しい軌道に乗っていますか?いわば、一度切る前に二度測りたい。

更新:まあ、上記は私にエラーを与えます

You need to run this command from the toplevel of the working tree.
You need to run this command from the toplevel of the working tree.
..

そのため、ツリーを最上位に移動してコマンドを再実行したところ、すべて機能しました。

4

1 に答える 1

9

プロセスは正しいようです。

この回答のように、bfg repocleaner のようなツールを使用して、クリーン プロセスをテストすることもできます。

java -jar bfg.jar --delete-files *.{jpg,png,mp4,m4v,ogv,webm} ${bare-repo-dir};

(ただし、BFG は最新のコミットで何も削除しないことを確認するため、現在のインデックスでそれらのファイルを削除し、「クリーンな」コミットを行う必要があります。他のすべての以前のコミットは BFG によってクリーンアップされます)

2020 年の更新: ファイルを削除するには、git filter-repo(Git 2.22+、2019 年第 4 四半期) を使用git filter-branchするようBFGになりました。

git filter-repo --path fileToRemove --invert-paths
于 2013-07-02T06:46:00.347 に答える