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 ができないときにバイナリファイルのダウンロードをスキップする | MSeeeeN | 大阪発 IT メディア by MSEN
smudgeエラーが起きるのでそのエラーをSkipするだけで一時対応はできました。 しかし、あくまでも一時対応のため、グループ全員に行ってもらう必要があります。
解決方法
根本的解決ができた方法も記録しておきます。
smudgeエラーをSkipできる状態にする
git lfs install --skip-smudge
pullする
git pull
git lfs pull
問題のファイルを削除する(今回の場合は image1111.png)
rm image1111.png
削除したファイルを再度追加する
再度pushする
smudgeエラーが発生するようなファイル破損状態になったことが原因のようです。
解消方法は破損ファイルの削除で対応することができました。