jubo的学習記録

日々自分の技量のなさに悩みながら這いつくばって頑張っているエンジニアが勉強・学習したことの記録です。

GitLFSで404エラーが出た

ことの発端

グループ開発でGitLFSを利用しておりました。

ある時メンバーから「sourcetreeでブランチを切り替えられない」ということを言われました。 masterブランチからdevelopブランチに checkout したかったようです。

こんなエラーが出ていました。

git -c diff.mnemonicprefix=false -c core.quotepath=false checkout -b develop --track origin/develop
Downloading image1111.png (2 KB)
Error downloading object: image1111.png (bcfc16): Smudge error: Error downloading image1111.png (***************************************************************************): 
[***************************************************************************] 
Object does not exist on the server: [404] Object does not exist on the server

Use `git lfs logs last` to view the log.

error: external filter 'git-lfs filter-process' failed
fatal: image1111.png: smudge filter lfs failed

確認のためコマンドラインでcloneしてみると下記エラーになりました。

[***************************************************************************] 
対象がサーバー上に存在しません: [404] 対象がサーバー上に存在しません

Errors logged to image/.git/lfs/logs/20181120T181049.624332.log
Use `git lfs logs last` to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: image1111.png: smudge filter lfs failed
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'

下記対応方法を見つけ、そのメンバーには対応してもらいました。

Git LFS でうまく clone や pull ができないときにバイナリファイルのダウンロードをスキップする

smudgeエラーが起きるのでそのエラーをSkipするだけで一時対応はできました。 しかし、あくまでも一時対応のため、グループ全員に行ってもらう必要があります。

解決方法

根本的解決ができた方法も記録しておきます。

  1. smudgeエラーをSkipできる状態にする

    git lfs install --skip-smudge

  2. pullする

    git pull

    git lfs pull

  3. 問題のファイルを削除する(今回の場合は image1111.png

    rm image1111.png

  4. 削除したファイルを再度追加する

  5. 再度pushする

smudgeエラーが発生するようなファイル破損状態になったことが原因のようです。

解消方法は破損ファイルの削除で対応することができました。