Git pull - 涂抹过滤器lfs失败

Jac*_*ack 13 git github git-lfs

我正试图从Github(git pull origin master)将代码拉到我们的服务器上.

这之前有用.但是,现在,我收到以下错误:

$ git pull origin master
From github.com:org-name/repo-name
 * branch              master     -> FETCH_HEAD
Updating 8024663e..e458e5c1
fatal: path/to/file.msi: smudge filter lfs failed
Run Code Online (Sandbox Code Playgroud)

我运行相同的命令GIT_TRACE=1:

$ GIT_TRACE=1 git pull origin master
19:25:26.331064 git.c:371               trace: built-in: git 'pull' 'origin' 'master'
19:25:26.333947 run-command.c:350       trace: run_command: 'fetch' '--update-head-ok' 'origin' 'master'
19:25:26.334661 exec_cmd.c:116          trace: exec: 'git' 'fetch' '--update-head-ok' 'origin' 'master'
19:25:26.337625 git.c:371               trace: built-in: git 'fetch' '--update-head-ok' 'origin' 'master'
19:25:26.344457 run-command.c:350       trace: run_command: 'ssh' 'git@github.com' 'git-upload-pack '\''org-name/repo-name.git'\'''
19:25:26.925565 run-command.c:350       trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
19:25:26.937016 run-command.c:350       trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
19:25:26.937833 exec_cmd.c:116          trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
19:25:26.941292 git.c:371               trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all' '--quiet'
From github.com:org-name/repo-name
 * branch              master     -> FETCH_HEAD
19:25:26.994717 run-command.c:1130      run_processes_parallel: preparing to run up to 1 tasks
19:25:26.994880 run-command.c:1162      run_processes_parallel: done
19:25:26.995780 run-command.c:350       trace: run_command: 'gc' '--auto'
19:25:26.996735 exec_cmd.c:116          trace: exec: 'git' 'gc' '--auto'
19:25:27.000596 git.c:371               trace: built-in: git 'gc' '--auto'
19:25:27.002716 run-command.c:350       trace: run_command: 'merge' 'FETCH_HEAD'
19:25:27.003445 exec_cmd.c:116          trace: exec: 'git' 'merge' 'FETCH_HEAD'
19:25:27.006078 git.c:371               trace: built-in: git 'merge' 'FETCH_HEAD'
Updating 8024663e..e458e5c1
19:25:27.420945 run-command.c:350       trace: run_command: 'git-lfs filter-process'
19:25:27.470865 run-command.c:209       trace: exec: '/bin/sh' '-c' 'git-lfs filter-process' 'git-lfs filter-process'
trace git-lfs: run_command: 'git' version
trace git-lfs: run_command: 'git' config -l
trace git-lfs: Initialize filter-process
trace git-lfs: Read filter-process request.
trace git-lfs: Read filter-process request.
fatal: path/to/file.msi: smudge filter lfs failed
19:25:27.998635 run-command.c:42        trace: run_command: running exit handler for pid 18022
Run Code Online (Sandbox Code Playgroud)

我验证了我的ssh凭据是正确的:

$ ssh -T git@github.com
Hi user-name! You've successfully authenticated, but GitHub does not provide shell access.
Run Code Online (Sandbox Code Playgroud)

而且,事实上,我知道凭据是可以的,因为它pull会降低.gitattributes文件(以及我已完成的其他小文件更改):

 file.msi filter=lfs diff=lfs merge=lfs -text
Run Code Online (Sandbox Code Playgroud)

我验证了Git LFS似乎配置正确:

$ git config -l
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
...
Run Code Online (Sandbox Code Playgroud)

我发现了这个Github问题,我尝试了所有三个步骤:

$ echo "protocol=https\nhost=github.com" | git credential fill
$ echo "protocol=https\nhost=github.com" | git credential fill | git credential reject
$ echo "protocol=https\nhost=github.com" | git credential fill | git credential approve
Run Code Online (Sandbox Code Playgroud)

第一步询问我的用户名.因此,正如它所说,Git LFS似乎没有缓存任何东西.

我对Git LFS没有多少经验,坦率地说,我对如何处理这个问题缺乏想法.

我最近采取的两项措施可能会破坏一些东西:

  1. 我从我们的存储库中删除了一个用户 服务器的ssh密钥属于用户.我们添加了一个部署密钥,但我读到Git LFS不支持部署密钥(尽管最近似乎添加了支持).所以,我们切换到用户密钥.两个密钥都通过ssh -T git@github.com测试确认.不过,也许存在身份验证问题?
  2. 我将存储库拖到没有Git LFS的服务器上.我当时没有意识到,但传输到目标服务器的文件很好.但是,也许这会破坏存储库中的某些东西?

任何你可以借出的帮助将不胜感激.

PS - 如果我的匿名造成混乱,我很抱歉.我替换了我们的实际IP地址X.X.X.X; 我们的组织名称org-name; 我们的回购品名称repo-name; 我们的Github用户user-name; 文件名用file.msi; 还有一些东西.

编辑5/16/17:增加语言,以明确它曾经工作......而且我打破了它.

gra*_*ild 11

在我的情况下,SSH认证的存储库已更新为使用来自另一个客户端的LFS,而在我这边,Git-LFS不知道SSH remote-url.我做了什么修复它是以下:

$ git config lfs.url $(git config remote.origin.url)
Run Code Online (Sandbox Code Playgroud)

(如果您的遥控器未命名,remote.origin.url则更改为您的远程名称.)

$ git config lfs.url
Run Code Online (Sandbox Code Playgroud)

确认它确实包含SSH URL,而不是某些HTTP/HTTPS URL.

然后你可以

$ git pull
Run Code Online (Sandbox Code Playgroud)

或者,如果你之前搞砸了origin,并lfs.url在一定程度上将分歧的是对我的情况,那么你可能需要origin(提防,小心地执行!).

另见:https://github.com/git-lfs/git-lfs/issues/2661#issuecomment-335903332