Git Tech

remote: Large files detected. Please consider using Git LFS(Large File Storage) が出てハマった話

TD;DR

先日、業務にてGoogle Source Repo → Backlogへのリモートリポジトリ移管作業が発生しました。

移管といっても、基本的にはpushするremoteの目先を Google Source Repo → Backlog にして、pushするだけだろうと思っていたのですが、こういうエラーが出てきた。

remote: Large files detected. Please consider using Git LFS(Large File Storage).
remote: See https://xxx.backlog.jp/help/git-lfs-about for more information.
remote: File docker/xxx/hoge.zip exceeds Backlog's file size limit of 100M
remote: File docker/xxx/hoge2.tar.gz exceeds Backlog's file size limit of 100M
remote: File docker/xxx/hoge.zip exceeds Backlog's file size limit of 100M

どうも100Mを超えるファイルをpushしようとして怒られているらしい。

別段いらないファイルなのでフォルダ構成上からは削除して、再度pushしても同じエラーがでた。

…なぜ?

と考えて気づく。

ローカルのgitの履歴の中にこのファイルがいるんだなと。

というわけで、gitの歴史改変を行う必要があるのですが、その時にハマったことをこの記事では書いていきます。

まず最初に試したのは git filter-repo

エラーメッセージの内容でググると一番最初に出てきたのはこちらのブログだった。

書かれている通りにgit-filter-repoを入れて、以下コマンドを実行。

git filter-repo --path hoge.zip --invert-paths
git filter-repo --path hoge2.zip --invert-paths
git push --force origin master

で、上手くいくのかと思われたが、再びエラー。

remote: Large files detected. Please consider using Git LFS(Large File Storage).
remote: See https://xxx.backlog.jp/help/git-lfs-about for more information.
remote: File docker/xxx/hoge2.tar.gz exceeds Backlog's file size limit of 100M

どうもgit filter-repoを実行した一つ目のhoge.zipはきちんと消えている様子だったのだが、hoge2.zipが残ったままになっているっぽい。

なぜだかわからないが、 git filter-repo は複数のファイルを消すときには何度試してもうまくいかなかった。

これ、原因わかる方いらっしゃればぜひ教えてください

試せばよかったと思うこと

少なくともhoge.zipに関してはエラーと言われていないということは、こいつに関してはエラーが解消されているということになる。

かつ、もともと使っていたGoogle Source Repoにはエラーが出ずpushできているということは、

この段階で新たなリポジトリ(これは一時的に使いたいだけ)を作成し、まずはGoogle Source Repoへpush。

で、上で作ったリポジトリをcloneして、今度は hoge2.tar.gz をgit filter-repoする。

これでおそらく二つ目の hoge2.tar.gz も消えて、backlogのリモートリポジトリへpush --forceすればうまくいったのかもしれない。

次に試したのは BFG Repo-Cleaner

原因はローカルのgitの履歴に100Mを超えるファイルがあることというのははっきりわかっていたので、コミット履歴を改変する方法を探していると、以下のgithubのページへたどり着いた。

そこで紹介されていたのが、 BFG Repo-Cleaner 。

オープンソースコミュニティによって構築・メンテナンスされているツールのようです。

上記リンクの遷移先のページの右側にあるDownloadボタンを押すと、jarファイルが落ちてくる。

「マジで?jar?」

というわけで BFG Repo-Cleaner はjavaのランタイム環境がないと動かないみたいです。

私はjavaのランタイム環境はすでにあったので、特に準備なくすぐに使えましたが、ランタイム環境がない人は作りましょう。

ググればすぐにできます。

BFG Repo-Cleanerを使って歴史改変

先にダウンロードしたjarファイルを適当なディレクトリにおいて、その場所を指定して以下コマンドを実行します。

java -jar C:\work\bfg-1.14.0.jar --delete-files hoge.zip
java -jar C:\work\bfg-1.14.0.jar --delete-files hoge2.tar.gz

すると、git filter-repoよりもリッチなログが出てきて、歴史改変の結果を教えてくれます。

終わったら、あとはリポジトリにpush --forceするだけ。

git push --force origin master

これでうまくいった。

直近の推し5選!

1

みなさんこんばんは。 こんにちは、Kanon です。今回は… しめさば先生の『君は僕の後悔』の感想記事です。 しめさば先生はこれまでにも『ひげを剃る。そして女子高生を拾う』や『きみは本当に僕の天使なの ...

2

リンク あらすじ 人生オール80点。 そんな俺が託されたのは、元トップアイドル・香澄ミルの世話だった。 ファン対応がしみつきなかなかクラスに馴染めないミル。 そんな彼女に頼られるうち、俺たちは図らずも ...

3

リンク 二丸先生の他の作品はこちら あらすじ 記憶喪失の湖西廻の前に現れたのは、清純で素朴な美少女、丹沢白雪。 「──私、廻くんと恋人だったの」  白雪はそう言って顔を赤らめ、廻の頬にキスをする。   ...

4

リンク あらすじ その夜、僕の青春は〈炎〉とともに産声をあげた――  スマホを忘れて夜の学校に忍び込んだ在原有葉(ありはらあるは)は、屋上を照らす奇妙な光に気づく。そこで出会ったのは、闇夜の中で燃え上 ...

5

こんにちは、Kanon です。今回は… しめさば先生の『きみは本当に僕の天使なのか』の感想記事です。 表紙とタイトルを見るに幻想的な恋の話のように思えるのですが、実はタイトルはそんな幻のようなものでは ...

-Git, Tech
-, , , , , , , , , , , , ,