首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Git拉污过滤器lfs失败

Git拉污过滤器lfs失败
EN

Stack Overflow用户
提问于 2017-05-15 22:42:47
回答 2查看 58.9K关注 0票数 29

我正试图从Github (git pull origin master)中将代码拖到服务器上。

这以前起过作用。但是,现在,我收到了以下错误:

代码语言:javascript
运行
复制
$ 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运行了相同的命令

代码语言:javascript
运行
复制
$ 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凭据是正确的:

代码语言:javascript
运行
复制
$ ssh -T git@github.com
Hi user-name! You've successfully authenticated, but GitHub does not provide shell access.

事实上,我知道凭据是可以的,因为pull会删除.gitattributes文件(以及我所做的其他小文件更改):

代码语言:javascript
运行
复制
 file.msi filter=lfs diff=lfs merge=lfs -text

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

代码语言:javascript
运行
复制
$ 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问题,我尝试了这三个步骤:

代码语言:javascript
运行
复制
$ 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似乎并没有缓存任何东西。

我对Git没有太多的经验,坦率地说,我对如何处理这个问题没有太多的想法。

我最近采取的两项行动可能破坏了一些东西:

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

如果你能提供任何帮助,我们将不胜感激。

抱歉我的匿名行为造成了混乱。我用X.X.X.X替换了我们的实际IP地址;用org-name替换了我们的组织名称;用repo-name替换了我们的回购名称;用user-name替换了我们的Github用户;用file.msi替换了文件名;还有更多的东西。

编辑5/16/17:添加语言,以明确它过去的工作.我把它弄坏了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-20 10:02:23

在我的例子中,通过SSH认证的存储库被更新为使用来自另一个客户端的LFS,而在我这一边,Git并不知道SSH远程-url。我为解决这一问题所做的工作如下:

remote.origin.url中配置的URL (push URL for origin)复制到lfs.url ( URL使用):

代码语言:javascript
运行
复制
$ git config lfs.url $(git config remote.origin.url)

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

那就跑

代码语言:javascript
运行
复制
$ git config lfs.url

以显示url并确认它确实包含SSH url,而不是某些HTTP/HTTPS URL。

然后你就可以

代码语言:javascript
运行
复制
$ git pull

好了。

如果您以前搞砸了,而mainorgin/main在某种程度上与我有分歧,那么您可能需要使用git checkout -fB main origin/main (这并不要求,覆盖了 main 分支的本地版本,所以要小心执行!)

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

票数 34
EN

Stack Overflow用户

发布于 2021-02-09 19:19:22

在我的例子中,我必须在遵循@grandchild的答案提供的说明之后再添加一个步骤。正如@grandchild所解释的那样,我的远程git最近从原来的https更改为使用协议ssh。在我的git配置中,git配置"http.sslverify“不是最初设置的。我认为,如果缺少默认值,则默认值为真。它导致“污点过滤器lfs失败”错误。一旦我把它设为假

$ git配置http.sslverify false

它的工作没有错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43989902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档