Chr*_*ver 169 unix git ssh version-control
我一直在使用git来保持我的项目的两个副本同步,一个是我的本地盒子,另一个是测试服务器.这是当我使用ssh登录到远程开发服务器时发生的问题;
git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.
Run Code Online (Sandbox Code Playgroud)
(文件名已被更改以保护有罪......!)
两个盒子都运行Solaris 10 AMD.我已经做了一些挖掘,如果我添加--upload-pack=$(which git-upload-pack)命令工作,(并证明它$PATH包含根据RTFM解决方案'git-upload-pack'的路径)但这真的很烦人,加上'git push'不起作用,因为我认为没有--unpack=选择.
顺便说一下,所有的git命令都可以在我的本地方框中正常工作,它与安装在同一个NFS挂载上的软件(1.5.4.2)版本相同/usr/local/bin.
有人可以帮忙吗?
Mat*_*tis 169
确保git-upload-pack在非登录shell的路径上.(在我的机器上它就在/usr/bin).
要从非登录shell查看远程计算机上的路径,请尝试以下操作:
ssh you@remotemachine echo \$PATH
Run Code Online (Sandbox Code Playgroud)
(适用于Bash,Zsh和tcsh,也可能适用于其他shell.)
如果它返回的路径不包含已有的目录,则git-upload-pack需要通过将其设置为.bashrc(对于Bash),.zshenv(对于Zsh),.cshrc(对于tcsh)或等效的shell 来修复它.
您需要在远程计算机上进行此更改.
如果您不确定需要添加到远程控制器的路径PATH,可以使用此命令找到它(需要在远程计算机上运行):
which git-upload-pack
在我打印的机器上/usr/bin/git-upload-pack.因此,在这种情况下,/usr/bin您需要确定的路径是否在远程非登录shell中PATH.
Bri*_*ins 66
您还可以使用"-u"选项指定路径.我发现这对我的.bashrc不会在非交互式会话中获取的机器很有用.例如,
git clone -u /home/you/bin/git-upload-pack you@machine:code
Run Code Online (Sandbox Code Playgroud)
Gar*_*ett 56
基于Brian的回答,可以通过在克隆之后运行以下命令来永久地设置上载包路径,这消除了--upload-pack对后续拉/取请求的需要.同样,设置receive-pack消除了--receive-pack对推送请求的需要.
git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack
Run Code Online (Sandbox Code Playgroud)
这两个命令相当于将以下行添加到repo中.git/config.
[remote "origin"]
uploadpack = /path/to/git-upload-pack
receivepack = /path/to/git-receive-pack
Run Code Online (Sandbox Code Playgroud)
频繁的用户clone -u可能对以下别名感兴趣.myclone应该是不言自明的.myfetch/mypull/mypush可以在其回购配置为通过替换上述没有被修改被用于git push与git mypush,等等.
[alias]
myclone = clone --upload-pack /path/to/git-upload-pack
myfetch = fetch --upload-pack /path/to/git-upload-pack
mypull = pull --upload-pack /path/to/git-upload-pack
mypush = push --receive-pack /path/to/git-receive-pack
Run Code Online (Sandbox Code Playgroud)
And*_*ndy 30
我发现并使用(成功)此修复程序:
# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .
Run Code Online (Sandbox Code Playgroud)
小智 12
出于安全原因,Mac OS X和其他一些Unix至少将用户路径编译成sshd,因此我们这些将git安装为/ usr/local/git/{bin,lib,...}的人会因为git而遇到麻烦可执行文件不在预编译路径中.要覆盖它,我更喜欢编辑我的/ etc/sshd_config更改:
#PermitUserEnvironment no
Run Code Online (Sandbox Code Playgroud)
至
PermitUserEnvironment yes
Run Code Online (Sandbox Code Playgroud)
然后根据需要创建〜/ .ssh/environment文件.我的git用户在他们的〜/ .ssh/environment文件中有以下内容:
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
注意读取〜/ .ssh/environment文件时不会发生变量扩展:
PATH=$PATH:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
不管用.
Matt的解决方案在OS X上对我不起作用,但Paul的确如此.
保罗链接的简短版本是:
/usr/local/bin/ssh_session使用以下文本创建:
#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
export SSH_LOGIN=1
exec login -fp "$USER"
else
export SSH_LOGIN=
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.profile ] && source ~/.profile
eval exec "$SSH_ORIGINAL_COMMAND"
fi
Run Code Online (Sandbox Code Playgroud)
执行:
chmod +x /usr/local/bin/ssh_session
将以下内容添加到/etc/sshd_config:
ForceCommand/usr/local/bin/ssh_session
我在MsysGit版本中遇到了这些错误.
按照我在这里和其他地方找到的所有建议后,我最终:
安装Cygwin版本的Git
在服务器上(Win XP与Cygwin SSHD),这最终解决了它.
我仍然使用MsysGit版本的客户端
..实际上,这是它对我有用的唯一方式,因为我从同一个sshd服务器获取了Cygwin Git的POSIX错误
我怀疑Git使用的这方面仍然需要一些工作..(ssh +在Windows中轻松拉/推)
| 归档时间: |
|
| 查看次数: |
121533 次 |
| 最近记录: |