2012-03-27 87 views
1

我试图在我自己的服务器上设置git,并在那里用capistrano推送我的项目。nameofrepo.git似乎不是一个混帐存储库

还在说

致命的:“/home/gitolite/repositories/iminrails.git”似乎并不 是一个Git仓库 但我可以看到iminrails.git目录库的服务器。 所以我尝试了不同的过程如何推动我的回购在服务器上,但我仍然得到这个错误。

[email protected]:/var/www/iminrails$ scp -r /tmp/iminrails.git [email protected]:/home/gitolite/repositories/ 
Enter passphrase for key '/home/ofer/.ssh/id_rsa': 
bad command: scp -r -t -- /home/gitolite/repositories/ 
lost connection 
[email protected]:/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

你的第一个命令失败。这应该在推送错误之前修复。 – JoePasq 2012-03-27 20:18:41

+0

尝试使用'ssh'访问服务器并使用'git init'创建存储库以确认您拥有这些权限。 – 2012-03-28 21:59:19

回答

0

WHE你是一个gitolite帐户USNG SSH,你将可使用ssh配置为使用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命令。如果您在授权密钥文件中没有命令=部分,这是可能运行的命令。

的想法很简单:只有

  • 没有交互的shell访问
  • git的命令(这样你的scp命令是一个Git命令),但被拒绝。

如果您需要将现有的本地的Git回购复制到远程Gitolite服务器,请参阅“moving pre-existing repos into gitolite

让gitolite创建为新的回购品牌节中的描述在“adding users and repos”上。

cd到工作站上的克隆。
确保所有分支都是正确的,没有额外的东西,“临时”分支等。,存在

现在你试图推匀前运行这两个命令

git push --all [email protected]:reponame 
git push --tags [email protected]:reponame 
相关问题