我一直在使用git和laravel在本地工作。我最终决定在我们的服务器上添加一个裸仓库,以推动变更并自动部署。
我确定我做错了,因为我使用git是绿色的。当我执行推送时,我收到以下错误:
stdin: is not a tty
bash: git-receive-pack: command not found
fatal: Could not read from remote repository
Please make sure you have the correct access rights and the repository exists.
这是我使用的过程 - 请记住,项目存储库最初是从laravel克隆的,我创建了自己的主分支,并且存在一些推送。我已经安装了所有ssh日志记录。
mkdir public_html.git
cd public_html.git
git init --bare
git remote add www user@0.0.0.0:public_html.git
git checkout -b develop
git push www
大多数调查研究都提到检查git / config文件,但所有这些似乎都是正确的。
答案 0 :(得分:3)
看起来git-receive-pack
不在用于推送到存储库的用户配置的路径上。当您通过ssh git推送到git存储库时,将使用ssh在正在执行推送的用户帐户下执行远程服务器上的命令。这些命令(例如git-receive-pack
)必须在服务器上该用户的路径上可用。要诊断这一点,我将首先执行命令
ssh user@0.0.0.0 which git-receive-pack
您几乎肯定会收到命令未找到错误。接下来你可以尝试
ssh user@0.0.0.0 'echo $path' # Note the single quotes.
这将显示用户在远程服务器上的路径,并可帮助您找出问题所在。请注意ssh手册页中的行:
ssh ... [user @] hostname [command]
...
如果指定了command,则在远程主机上执行,而不是登录shell。
这可能是一个微妙但重要的区别,因为它意味着使用ssh user@0.0.0.0
创建的远程登录shell可能看不到与ssh user@0.0.0.0 some remote command
运行的命令相同的shell环境。 This answer解释了这对bash shell的工作原理,其他人的行为类似。