将现有项目推入裸仓库

时间:2014-01-29 15:48:54

标签: git laravel

我一直在使用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日志记录。

  1. 通过ssh登录
  2. 创建目录:mkdir public_html.git
  3. 更改目录:cd public_html.git
  4. 创建了回购:git init --bare
  5. 添加了一个post-receive hook - 我验证了它在测试项目中的作用
  6. 移回本地机器
  7. 添加了一个新的遥控器:git remote add www user@0.0.0.0:public_html.git
  8. 创建了一个新分支:git checkout -b develop
  9. 试图推送:git push www
  10. 大多数调查研究都提到检查git / config文件,但所有这些似乎都是正确的。

1 个答案:

答案 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的工作原理,其他人的行为类似。