2017年の編集:これを読んでいる場合は、おそらくBFGRepo-Cleanerを調べる必要があります。
恥ずかしいことに、ローカルリポジトリのサイズが縮小しなかったのは、filter-branchでファイルへの間違ったパスを使用していたためです。ですから、J-16 SDiZとCodeGnomeの回答に感謝しますが、私の問題は椅子とキーボードの間にありました。
この質問を私の愚かさの記念碑ではなく、実際に人々に役立つようにするために、Githubでレポを元に戻すために、レポをトリミングした後に実行する必要のある手順を書き留めました。 。これが誰かの助けになることを願っています。
問題のあるファイルを削除する
問題のあるファイルを削除するには、 Githubで機密データを削除する方法に基づいて、以下のシェルスクリプトを実行します
#!/usr/bin/env bash
git filter-branch --index-filter 'git rm -r -q --cached --ignore-unmatch '$1'' --prune-empty --tag-name-filter cat -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
ローカルリポジトリのすべてのブランチを調べてこれを実行しましたが、これが必要かどうかは正直わかりません(すべてのブランチでこれを実行する必要はありません)。ただし、次のステップではすべてのブランチがローカルである必要があります。心に留めておきます。完了すると、ローカルリポジトリのサイズが減少するのがわかります。また、CodeGnomeの回答でblobスクリプトを実行して、問題のあるblobが削除されるのを確認できるはずです。そうでない場合は、ファイル名とパスを再確認し、それらが正しいことを確認してください。
ここでgitfilter-branchが実際に行っているのは、リポジトリ内の各コミットで引用符で囲まれたコマンドを実行することです。
スクリプトの残りの部分は、古いデータのキャッシュされたバージョンをクリーンアップするだけです。
トリミングされたリポジトリをプッシュする
ローカルリポジトリが状態になっているので、Githubに戻すのがコツです。残念ながら、Githubリポジトリからバイナリデータを完全に削除する方法はありません。Githubの機密データのハウツーからの引用です。
強制プッシュはリモートリポジトリのコミットを消去しないことに注意してください。新しいリポジトリを導入し、ブランチポインタを移動してそれらを指すようにします。ユーザーがSHA1を介して不正なコミットに直接アクセスすることを心配している場合は、リポジトリを削除して再作成する必要があります。
Githubリポジトリを再作成する必要があるのは残念ですが、リポジトリの再作成は実際には非常に簡単です。苦痛は、問題とwikiのデータも再作成する必要があることです。これについては以下で説明します。
私がお勧めするのは、githubで新しいリポジトリを作成し、準備ができたら古いリポジトリに切り替えることです。これは、古い名前を「repo name old」のような名前に変更してから、新しく作成されたリポジトリの名前を「reponame」に変更することで実行できます。新しいリポジトリを作成するときは、READMEで初期化のチェックを外してください。そうしないと、きれいな状態を処理できなくなります。
最後の手順を完了した場合は、リポジトリをクリーンアップして準備ができているはずです。リモートは、新しいGithubリポジトリの場所と一致するように変更する必要があります。私は.git/configファイルを直接編集することでこれを行いますが、誰かがそれを行うのは正しい方法ではないと私に言うだろうと確信しています。
プッシュを実行する前に、ローカルリポジトリにプッシュするすべてのブランチとタグがあることを確認してください。準備ができたら、以下を使用してすべてのブランチをプッシュします
git push --all
git push --tags
これで、トリミングされたローカルリポジトリと一致するリモートリポジトリが必要になります。万が一に備えて、すべてのデータが作成されていることを再確認してください。
これで、問題やwikiについて心配する必要がなければ完了です。あなたが読んだら。
ウィキを移動する
Github wikiは、メインリポジトリに関連付けられているもう1つのリポジトリです。したがって、開始するには、古いwikiリポジトリのクローンをどこかに作成します。次に、ウィキを作成するために新しいリポジトリのウィキタブをクリックする必要があると私が言う限り、次の部分はちょっとトリッキーですが、新しく作成されたウィキに初期ファイルをシードします。だから私がしたこと、そしてもっと良い方法があるかどうかはわかりませんが、リモートを新しく作成したwikiリポジトリに変更し、を使用して新しい場所にプッシュすることです
git push --all --force
ここで力が必要なのは、そうしないとgitが現在のブランチの先端が一致しないと文句を言うからです。これにより、最初のページがgitレポジトリで切り離された状態になる可能性があると思いますが、レポジトリのサイズへの影響は無視できるはずです。
問題を移動する
この答えによって与えられたこれに関するアドバイスがあります。しかし、回答にリンクされているスクリプトを見ると、かなり不完全であるように見えます。コメントをインポートするためのTODOがあり、問題の状態を引き継ぐかどうかはわかりませんでした。
未解決の問題のキューがかなり少なく、未解決の問題を失ってもかまわないことを考えると、手作業で物事を持ち込むことにしました。コメントで他の人に適切に帰属することでこれを行うことは不可能であることに注意してください。したがって、より大規模で確立されたプロジェクトの場合、すべてを引き継ぐために、より堅牢なスクリプトを作成する必要があると思いますが、それは私の特定のケースでは必要ありませんでした。