我正试图将代码从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 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' '[email protected]' '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 [email protected]
Hi user-name! You've successfully authenticated, but GitHub does not provide shell access.
而且,事实上,我知道凭证是可以的,因为
GIT_TRACE=1
会使pull
文件(以及我所做的其他小文件更改)关闭: 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
...
我发现了这一点,并尝试了所有三个步骤:
$ 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
第一步要求输入用户名。所以,正如它所说,似乎GitLFS没有缓存任何东西。
我对Git LFS没有太多经验,坦率地说,我对如何处理这个问题没有想法。
我最近采取的两项行动可能会破坏某些东西:
我从存储库中删除了一个用户。服务器的ssh密钥属于用户。我们添加了一个部署密钥,但我看到了这一点(尽管,最近似乎添加了支持)。所以,我们切换到一个用户密钥。两个键均通过
.gitattributes
测试确认。不过,可能存在身份验证问题?我把存储库拉到了一个没有git-lfs的服务器上。当时我没有意识到,但是文件传输到目标服务器很好。然而,也许这会破坏存储库中的某些东西?
你能提供的任何帮助都将不胜感激。
如果我的匿名造成混乱,我很抱歉。我用
ssh -T [email protected]
替换了我们的实际IP地址;用X.X.X.X
替换了我们的组织名称;用org-name
替换了我们的repo名称;用repo-name
替换了我们的github用户;用user-name
替换了文件名;还有,还有一些事情。编辑5/16/17:增加了语言,以明确它过去的工作…我把它弄坏了。
最佳答案
在我的例子中,ssh认证存储库被更新为使用来自另一个客户机的lfs,而在我这边,git lfs不知道ssh远程URL。我采取了以下措施:
将在remote.origin.url
(push url fororigin
)中配置的url复制到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
关于git - Git pull - 涂抹过滤器lfs失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43989902/