Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GitHubにpushする際、ローカルのファイル削除を反映したいのですが...

解決したいこと

Git/GitHubに関して質問です。

GitHubでは大容量のファイルをpushできない(他のプランを選択する必要がある)そうなのですが、

①ローカルでログに出てきた大容量ファイル「sample.mp4」を消去
②削除したワークツリーをcommit
③リモートリポジトリへpush

しても、下記のように「大容量のファイルがあります」というようなログが発生します。
どうすればよいのでしょうか。

発生している問題・エラー

リモートリポジトリoriginにmainブランチの内容をpushしてみたのですが、以下のようなログが発生します。
src/main/webapp/sample.mp4 はローカル上は存在しない上に、commit時にdeleteされているはずだと思っているのですが...

$ git push -u origin main

Enumerating objects: 153, done.
Counting objects: 100% (153/153), done.
Delta compression using up to 12 threads
Compressing objects: 100% (142/142), done.
Writing objects: 100% (153/153), 294.66 MiB | 2.98 MiB/s, done.
Total 153 (delta 19), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (19/19), done.
remote: error: Trace: 3d64fc594505111b6c36af047922766d0f5099ac3d44bc03c9e3fd67e0
1cdf95
remote: error: See https://gh.io/lfs for more information.
remote: error: File src/main/webapp/sample.mp4 is 293.84 MB; this exceeds GitHub
's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File S
torage - https://git-lfs.github.com.
To github.com:[username]/[remote-repository].git
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'github.com:pbko-sato/YKK.git'

自分で試したこと

ネット上のgit rmコマンドを試してみましたがうまくいかず...

git rm sample.mp4
0

2Answer

一度大きなファイルをコミットでリポジトリに追加して、後にその大きなファイルを削除し別のコミットでリポジトリに反映したとしても
リポジトリ内には「このようなファイルを追加して後に削除した」という履歴として残っています。
GUIクライアントなら実際にどのコミットにどんなファイルツリーが含まれるか簡単に確認できると思います。(とりあえず gitk コマンドとかでも)

対応としては、「ファイルを追加して削除した」という履歴自体を消す必要があります。
歴史改変は色んな手段がありますが、簡単な手段としては

  1. sample.mp4を追加したコミットの直後に削除コミットしているのであれば、
    git rebase で squash してそれらのコミットを繋げてしまう
  2. 追加・削除のコミットいずれも、sample.mp4だけを扱っているのであれば、
    git rebase で それらのコミットを消してしまう
  3. 削除のコミットがsample.mp4だけ&ファイル追加してから一度も編集してないのであれば
    git rebase で削除コミットを追加コミットの直後になるよう順番を入れ替えてそのまま繋げる (多分できるはず)

辺りが楽だと思います。

それ以外の状況であれば、頑張って git reset などを駆使して自力で歴史を作り直すか
filter-branch 系のコマンドや外部ツールを使うなどの手段があります。
(すみませんがちょっと最新情報追っかけてないのでfilter系のベストプラクティスは把握できてません…)

3Like

ファイルサイズの制限
GitHub では、リポジトリ内で許可されるファイルのサイズを制限しています。 50 MiB を超えるファイルを追加または更新しようとすると、Git から警告が表示されます。 変更は引き続きリポジトリに正常にプッシュされますが、パフォーマンスへの影響を最小限に抑えるためにコミットを削除することを検討できます。
GitHub は 100 MiB を超えるファイルをブロックします。

截屏2023-08-07 16.51.49.png

公式チュートリアルがありますので、このページを読んで参照してください。

1Like

Your answer might help someone💌