web-dev-qa-db-ja.com

Gitのプル-フィルターの汚れが失敗しました

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' '[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.

そして、実際、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の問題 、そして私は3つのステップすべてを試しました:

$ 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の経験があまりなく、率直に言って、私はこの問題に取り組む方法についての考えがありません。

最近何かを壊したかもしれない2つの行動があります。

  1. リポジトリからユーザーを削除しました。サーバーのsshキーはユーザーに属していました。展開キーを追加しましたが、私はそれを読みました Git LFSは展開キーをサポートしていませんでした (ただし、最近サポートが追加されたようです)。そこで、ユーザーキーに切り替えました。両方のキーはssh -T [email protected]テストで確認されました。それでも、おそらく認証の問題がありますか?
  2. リポジトリをGit LFSのないサーバーにプルしました。そのときは気づきませんでしたが、ファイルは転送先サーバーに正常に転送されました。しかし、おそらくこれはリポジトリで何かを壊しましたか?

あなたが貸すことができるどんな援助でも大歓迎です。

PS-匿名化によって混乱が生じてすみません。実際のIPアドレスをX.X.X.Xに置き換えました。 org-nameを含む組織名repo-nameを含むリポジトリ名; user-nameを持つGithubユーザーfile.msiを含むファイル名。そして、さらにいくつかのこと。

編集5/16/17:以前は機能していたこと、そして私がそれを壊したことを明確にするために言語を追加しました。

14
Jack

私の場合、SSH認証リポジトリは別のクライアントからのLFSを使用するように更新され、私の側ではGit-LFSがSSHリモートURLを認識していませんでした。それを修正するために私がしたことは次のとおりです:

remote.Origin.urlで構成されたURL(OriginのプッシュURL)をlfs.url(LFSが使用するURL)にコピーします。

$ git config lfs.url $(git config remote.Origin.url)

(リモートの名前がOriginでない場合は、リモート名に変更してください。)

次に実行します

$ git config lfs.url

uRLを表示し、実際に一部のHTTP/HTTPS URLではなくSSH URLが含まれていることを確認します。

次にできます

$ git pull

できました。


If以前に失敗し、masterorgin/masterが私と同じように何らかの理由で分岐している場合、git checkout -fB master Origin/masterが必要になることがあります(これは質問しません)およびは、マスターブランチのローカルバージョンを上書きします注意して実行してください!)。

参照: https://github.com/git-lfs/git-lfs/issues/2661#issuecomment-335903332

11
grandchild