Skip to content

smudge filter assumes the "origin" remote exists and has the missing files #2169

@srjek

Description

@srjek

So I was experimenting with git-lfs in an attempt to get it working on my home server, when I stumbled across a cryptic error.

$ git pull
Updating 6c231ca..408714c
Downloading normal.tga (16.00 MB)
Error downloading object: normal.tga (87bcf825161b15108437017834569a6d0614fd99e3cb2269c5d184aee011a116)

Errors logged to D:\msys2\home\Josh\git-lfs-test-repo\local\.git\lfs\objects\logs\20170421T234530.4973295.log
Use `git lfs logs last` to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: normal.tga: smudge filter lfs failed

(log file)
(Disclaimer: above output was reproduced post-fix by a git reset --hard HEAD^ && rm -r .git/lfs)

Ultimately I traced it down to a combination of following:

Some possible fixes:

  • I've noticed the use of git.DefaultRemote() elsewhere. However I'm unfamiliar with the codebase, so I don't know if it's really that simple. It seems to be better than hardcoding origin though, and I may have already patched my system git-lfs to use it.
  • At the very least, a better error message that catches attempts to use non-existent remotes
  • AFAIK there's no way to know the remote in a pull like the pre-push hook does. Not that it matters since the smudge filters run on checkout. Maybe git can be extended to allow git-lfs to track what commits come from what remotes, or maybe a simpler shotgun approach where git-lfs queries all the remotes until it has found all files.

As a workaround you can either do GIT_LFS_SKIP_SMUDGE=1 git pull && git lfs pull, rename your remote to origin, or set lfs.url so there's only one git lfs server

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions