我正在尝试在我自己的服务器上设置git并使用capistrano将项目推送到那里。
它仍然说
致命:'/ home / gitolite/repositories/iminrails.git'似乎没有 是一个git存储库 但我可以在服务器上的目录存储库中看到iminrails.git。 所以我尝试了不同的过程如何在服务器上推送我的回购,但我仍然收到此错误。
ofer@debianruby:/var/www/iminrails$ scp -r /tmp/iminrails.git gitolite@example.com:/home/gitolite/repositories/
Enter passphrase for key '/home/ofer/.ssh/id_rsa':
bad command: scp -r -t -- /home/gitolite/repositories/
lost connection
ofer@debianruby:/var/www/iminrails$ git push origin master:refs/heads/master
Enter passphrase for key '/home/ofer/.ssh/id_rsa':
fatal: '/home/gitolite/repositories/iminrails.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
答案 0 :(得分:0)
当您使用gitolite帐户使用ssh时,您将使用ssh configure来使用forced command。
见Gitolite and ssh
如果你查看authorized_keys文件,你会看到这样的条目(当然我切断了它们的结尾;它们很长):
command="[path]/gl-auth-command sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gl-auth-command usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
首先,它找出此文件中的哪些公钥与传入登录匹配。这是加密的东西,我不会进入它 一旦找到匹配,它将运行该行给出的命令;例如,如果我登录,它将运行
[path]/gl-auth-command sitaram
所以首先要注意的是这样的用户没有“shell访问”,这很好!然而,在运行命令之前,sshd会设置一个名为
SSH_ORIGINAL_COMMAND
的环境变量,其中包含工作站发出的实际git命令。如果您在授权密钥文件中没有command = part,那么这个命令就会运行。
这个想法很简单:
如果您需要将现有的本地Git仓库复制到远程Gitolite服务器,请参阅“ moving pre-existing repos into gitolite ”
让gitolite将其创建为全新的回购,如“adding users and repos”部分所述。
cd到您工作站上的克隆 确保所有分支都正确,没有额外的东西,“临时”分支等存在
现在运行这两个命令
git push --all git@server:reponame
git push --tags git@server:reponame