背景:
我刚刚更换了硬盘,并重新安装了Lion。我从源代码安装了 git,make test
似乎很好。SSH 密钥已加载,我可以毫无问题地 ssh 到远程框中。
问题:
在使用 scp 样式语法 时尝试拉过 ssh 时出现以下错误:
$ git pull origin master
git-upload-pack: error while loading shared libraries: libcrypto.so.0.9.7: cannot open shared object file: No such file or directory
我的 .git/config 用于起源如下所示:
[remote "origin"]
url = me@example.com:some_repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
如果我将网址更改为ssh://me@example.com/path/to/some/repo.git
它工作正常。
我认识到我可以将所有 url 更改为该格式,但我宁愿拥有一个正常工作的系统,而不必每次都解决设置问题。
在重新安装 lion 之前,我能够很好地推送和拉动这个 repo,我仍然可以使用不同的语法。我怀疑我在雪豹时代在旧硬盘上链接了一些东西来解决这个问题,但我花了很长时间在谷歌上搜索它是什么。我发现一篇文章表明问题在于缺少库服务器端并且错误消息具有误导性,但事实并非如此,因为它在旧硬盘驱动器上运行良好,并且与 ssh://语法配合使用也很好
有人知道如何解决这个问题吗?
尝试使用 dtrace 来弄清楚它到底在做什么。在另一个终端中运行它,然后像往常一样运行git pull
。
$ sudo dtrace -qn 'syscall::execve:entry { printf("%sn", copyinstr(arg0)); }'
/usr/bin/uname
/usr/libexec/git-core/git
。切。。。
/usr/libexec/git-core/git-pull
/usr/libexec/git-core/ssh
/usr/bin/ssh
使用otool -L /usr/bin/ssh
查看是否缺少某些库。
但是在编写本文时,它认为您的问题可能出在服务器端。如果你在运行git pull
时而不是我的dtrace单行运行sudo newproc.d
,你会看到这样的内容:
58694 64b ssh me@example.com git-upload-pack 'some_repo.git'
这表示错误可能来自在服务器端执行时git-upload-pack
。因此,请查看服务器上git-upload-pack
使用的动态库。
试着跑ssh me@example.com 'ldd $(which git-upload-pack)'
,寻找一些可疑的东西。git-upload-pack
外壳工作吗?