現在私は
- 空の GitHub リポジトリ
- SSH サーバー リポジトリ (メイン)
- ローカルリポジトリ
SSH サーバー リポジトリは最新のリポジトリ (本番サイト) だったので、そこからローカルに Git クローンしました。次に、git push
GitHub にクローンしようとしました。
すべて正常に進みましたが、filename.gz が GitHub には大きすぎるというメッセージが表示されました。このファイルは必要なかったので、Git コマンドをいくつか実行して Git キャッシュから削除し、SSH サーバーにプッシュバックしました。
ローカルでは大きなファイルは表示されませんが、SSH サーバー上にはまだ存在しています。git diff
何も返されず、git push は「すべてが最新です」を返します。また、ローカル リポジトリでファイルが表示されなくても、GitHub にプッシュしようとすると、エラーが発生します。
リモート: エラー: ファイル fpss.tar.gz は 135.17 MB です。これは GitHub のファイル サイズ制限 100 MB を超えています
「問題の解決」の手順に従いましたGitHubヘルプに掲載それで十分ではなかったでしょうか?
ファイルがローカルに存在せず、git status/diff/push にもリストされていない場合、どのようにしてファイルがまだ存在しているのでしょうか?
ベストアンサー1
使用できます
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
これにより、そのファイルの履歴にあるすべての内容が削除されます。問題は、そのファイルが履歴に残っていることです。
このコマンドはコミットのハッシュを変更するため、特に共有リポジトリでは大きな問題となる可能性があります。結果を理解せずに実行しないでください。
編集: Git プロジェクトでは、現在、git filter-repo
の代わりにを使用することを推奨していますgit filter-branch
。
使用git filter-repo
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
インストール
[brew|pip3|...] install git-filter-repo
使用法
パスプレフィックスを持つ ファイルを削除するにはexample/path/to/something
、次のコマンドを実行します。
git filter-repo --path example/path/to/something--invert-paths
パスプレフィックスのない ファイルを削除するにはexample/path/to/something
、次のコマンドを実行します。
git filter-repo --path example/path/to/something