3

私は最近、いくつかのバイナリが含まれていた SVN リポジトリのクローンを作成しましたが、これらはもはや必要ありません。残念ながら、私はすでにバイナリを含めて Github にプッシュしています。「git filter-branch」を使用してこれらを削除したいのですが、タグとブランチに関してはいくつかの問題に直面しています。

基本的に、次のコマンドで特定されたファイルのリストを削除する簡単なシェル スクリプトを作成しました。

git rev-list --objects --all | grep .jar > files.txt

削除のスクリプトは次のようになります。

#!/bin/sh
while read file_hash file_to_remove
do
    echo "Removing "$file_to_remove;
    git filter-branch --index-filter "git rm --cached --ignore-unmatch $file_to_remove"
    rm -rf .git/refs/original/;
    git reflog expire --all --expire-unreachable=0;
    git repack -A -d;
    git prune
done < $1

いくつかのタグ (すべて .git/packed-refs にリストされています) と 1 つの .git/refs/remotes/origin (Github リポジトリを指す) があります。上記のスクリプトを使用してファイルを削除しても、.git/packed からすべての参照を手動で削除するまでは、必要な効果が得られません (「du -cm」は同じサイズを出力したままです。「git rev-list」はファイルを一覧表示したままです)。 -refs および .git/refs/remotes/origin ディレクトリ。

当然のことながら、このアプローチでローカルの変更を Github に戻す可能性だけでなく、すべてのタグを失います。見逃したものはありますか、それとも履歴を破棄せずにすべてのブランチ/タグからファイルを削除する別の方法はありますか?

前もって感謝します、マティス

4

1 に答える 1