nameofrepo.git似乎不是一个git存储库

时间:2012-03-27 19:09:33

标签: git capistrano ssh-keys gitolite

我正在尝试在我自己的服务器上设置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

1 个答案:

答案 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,那么这个命令就会运行。

这个想法很简单:

  • 没有交互式shell访问
  • 仅限git命令(因此你的scp命令不是 git命令),它被拒绝。

如果您需要将现有的本地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