Git 拉 - 涂抹过滤器 lfs 失败
Git pull - smudge filter lfs failed
我正在尝试从 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
我运行与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
我验证了我的 ssh 凭证是正确的:
$ ssh -T git@github.com
Hi user-name! You've successfully authenticated, but GitHub does not provide shell access.
而且,事实上,我知道凭据没问题,因为 pull
会关闭 .gitattributes
文件(以及我所做的其他小文件更改):
file.msi filter=lfs diff=lfs merge=lfs -text
我验证了 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
...
我找到了这个 Github issue,我尝试了所有三个步骤:
$ 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
第一步要求输入我的用户名。所以,正如它所说,Git LFS 似乎没有缓存任何东西。
我对 Git LFS 没有太多经验,f运行kly,我不知道如何解决这个问题。
我最近采取的两个操作可能会破坏某些东西:
- 我从我们的存储库中删除了一个用户。服务器的 ssh 密钥属于用户。我们添加了一个部署密钥,但我读到 Git LFS didn't support deployment keys(尽管最近似乎添加了支持)。因此,我们切换到用户密钥。两个密钥都通过
ssh -T git@github.com
测试得到确认。不过,也许存在身份验证问题?
- 我将存储库拉到没有 Git LFS 的服务器上。我当时没有意识到,但是文件 t运行 很好地转移到了目标服务器。但是,也许这破坏了存储库中的某些内容?
如果您能提供任何帮助,我们将不胜感激。
PS - 如果我的匿名造成混淆,我很抱歉。我用 X.X.X.X
替换了我们的实际 IP 地址;我们的组织名称 org-name
;我们的回购名称 repo-name
;我们的 Github 用户 user-name
;带有 file.msi
的文件名;还有一些事情。
编辑 2017 年 5 月 16 日:添加了语言以表明它曾经有效……但我弄坏了它。
在我的例子中,SSH-authenticated 存储库已更新为使用来自另一个客户端的 LFS,而在我这边 Git-LFS 不知道 SSH remote-url。我做了以下修复工作:
复制remote.origin.url
中配置的URL(push URL for origin
)到lfs.url
(URL LFS使用):
$ git config lfs.url $(git config remote.origin.url)
(如果您的遥控器未命名为 origin
,则更改为您的遥控器名称。)
然后运行
$ git config lfs.url
显示 URL 并确认它确实包含 SSH url,而不是某些 HTTP/HTTPS url.
那你可以
$ git pull
完成。
如果你之前搞砸了并且master
和orgin/master
有某种分歧就像我的情况那么你可能需要git checkout -fB master origin/master
(这不会询问并且会覆盖主分支的本地版本,所以小心并小心执行!)。
另请参阅:https://github.com/git-lfs/git-lfs/issues/2661#issuecomment-335903332
就我而言,我必须按照@grandchild 的答案提供的说明再添加一个步骤。正如@grandchild 所解释的,我的远程 git 存储库最近更改为使用原始 https 中的 ssh 协议。在我的git配置中,git配置“http.sslverify”原来没有设置。我相信如果缺少默认值,则默认值为 true。它导致错误“涂抹过滤器 lfs 失败”。一旦我将它设置为 false
$ git config http.sslverify false
运行正常。
我正在尝试从 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
我运行与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
我验证了我的 ssh 凭证是正确的:
$ ssh -T git@github.com
Hi user-name! You've successfully authenticated, but GitHub does not provide shell access.
而且,事实上,我知道凭据没问题,因为 pull
会关闭 .gitattributes
文件(以及我所做的其他小文件更改):
file.msi filter=lfs diff=lfs merge=lfs -text
我验证了 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
...
我找到了这个 Github issue,我尝试了所有三个步骤:
$ 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
第一步要求输入我的用户名。所以,正如它所说,Git LFS 似乎没有缓存任何东西。
我对 Git LFS 没有太多经验,f运行kly,我不知道如何解决这个问题。
我最近采取的两个操作可能会破坏某些东西:
- 我从我们的存储库中删除了一个用户。服务器的 ssh 密钥属于用户。我们添加了一个部署密钥,但我读到 Git LFS didn't support deployment keys(尽管最近似乎添加了支持)。因此,我们切换到用户密钥。两个密钥都通过
ssh -T git@github.com
测试得到确认。不过,也许存在身份验证问题? - 我将存储库拉到没有 Git LFS 的服务器上。我当时没有意识到,但是文件 t运行 很好地转移到了目标服务器。但是,也许这破坏了存储库中的某些内容?
如果您能提供任何帮助,我们将不胜感激。
PS - 如果我的匿名造成混淆,我很抱歉。我用 X.X.X.X
替换了我们的实际 IP 地址;我们的组织名称 org-name
;我们的回购名称 repo-name
;我们的 Github 用户 user-name
;带有 file.msi
的文件名;还有一些事情。
编辑 2017 年 5 月 16 日:添加了语言以表明它曾经有效……但我弄坏了它。
在我的例子中,SSH-authenticated 存储库已更新为使用来自另一个客户端的 LFS,而在我这边 Git-LFS 不知道 SSH remote-url。我做了以下修复工作:
复制remote.origin.url
中配置的URL(push URL for origin
)到lfs.url
(URL LFS使用):
$ git config lfs.url $(git config remote.origin.url)
(如果您的遥控器未命名为 origin
,则更改为您的遥控器名称。)
然后运行
$ git config lfs.url
显示 URL 并确认它确实包含 SSH url,而不是某些 HTTP/HTTPS url.
那你可以
$ git pull
完成。
如果你之前搞砸了并且master
和orgin/master
有某种分歧就像我的情况那么你可能需要git checkout -fB master origin/master
(这不会询问并且会覆盖主分支的本地版本,所以小心并小心执行!)。
另请参阅:https://github.com/git-lfs/git-lfs/issues/2661#issuecomment-335903332
就我而言,我必须按照@grandchild 的答案提供的说明再添加一个步骤。正如@grandchild 所解释的,我的远程 git 存储库最近更改为使用原始 https 中的 ssh 协议。在我的git配置中,git配置“http.sslverify”原来没有设置。我相信如果缺少默认值,则默认值为 true。它导致错误“涂抹过滤器 lfs 失败”。一旦我将它设置为 false
$ git config http.sslverify false
运行正常。