Centos主机git
上的“默认”BADHOST
,即/usr/bin/git
,是古老的(v 1.7.1),实际上比{{1}的所有其他实例都要老得多我一起工作。
事实证明,主持人git
在非标准位置(BADHOST
)安装了git
的更新版本(2.5.0)。这是我登录/opt/git-2.5.0/bin/git
时使用的版本,因此BADHOST
上的$HOME/.gitconfig
文件会被写入BADHOST
。
事实上,/opt/git-2.5.0/bin/git
的默认BADHOST
(git
)将我的/usr/bin/git
视为无效:
$HOME/.gitconfig
每当我尝试执行error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 10 in /home/yourstruly/.gitconfig
作为远程主机git
的操作时,这就成了问题。大多数此类操作失败,错误类似于上面显示的错误。
例如,如果我已登录其他主机(BADHOST
),则命令
OKHOST
...以
失败git clone BADHOST:/path/to/some/git/repo
但是,如果我删除Cloning into 'repo'...
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: error: Malformed value for push.default: simple
remote: error: Must be one of nothing, matching, tracking or current.
remote: fatal: bad config file line 10 in /home/yourstruly/.gitconfig
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
上的$HOME/.gitconfig
,然后在BADHOST
上重新运行git clone
命令,则会成功。
有解决这个疯狂问题的方法吗?
NB:我正在寻找以外的解决方案更改OKHOST
上的$HOME/.gitconfig
文件,以便其过时{ {1}},但不再适用于BADHOST
。此外,/usr/bin/git
的系统管理员拒绝了我升级/opt/git-2.5.0/bin/git
的所有请求,因此根据此类升级预测的解决方案也没有意义。
如果重要,BADHOST
上的我的{是/usr/bin/git
。{/ p>
答案 0 :(得分:1)
好的,我找到了解决方案。基本上我创建了两个脚本:twit
和ssh-wrapper
。
twit
非常简单:它只需调用git
并将GIT_SSH
设置为指向ssh-wrapper
。
#!/bin/sh
GIT_SSH=/path/to/ssh-wrapper git "$@"
ssh-wrapper
比较棘手(更有可能需要进一步的工作)。它假定它的第一个参数是一个主机名,它的第二个参数是一个命令,以" git
相关的"的名称开头。可执行文件。
#!/bin/sh
host=$1
cmd=/opt/git-2.5.0/bin/$2
exec ssh "$host" "$cmd"
现在,命令可以是,例如,
twit clone BADHOST:/path/to/some/git/repo
twit push BADHOST:/path/to/some/git/repo master
twit pull BADHOST:/path/to/some/git/repo master
...成功。
一个丑陋的黑客,当然。我绝对愿意接受更好的解决方案。