2014-05-20 218 views
5

我有一个基于Linux的Amazon AMI,它包含一个Git存储库。我想git clone这个存储库到我的本地OSX机器(它也安装了Git)。Git克隆失败

存储库位于/home/ec2-user/my_test_repo的亚马逊盒子上。 my_test_repo目录的内部是.git目录。

在我的OSX机器上,我可以成功通过SSH连接到主机为ec2-user的机器,我可以执行大量的bash命令。所以,我知道SSH的作品。

git clone ssh://[email protected]/home/ec2-user/my_test_repo.git 

我收到以下错误信息:

Cloning into 'my_test_repo'... 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 
fatal: Could not read from remote repository. 
Please make sure you have the correct access rights 
and the repository exists. 

任何想法,我在做什么错在这里然而,当我从我的OSX机器执行它下面的命令不起作用?

+0

请参阅:http://serverfault.com/questions/227804/why-cant-i-ssh-into-my-new-ec2-instance – bryanmac

回答

6

第一个问题是,你不能登录到服务器:

Cloning into 'my_test_repo'... 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 
fatal: Could not read from remote repository. 
Please make sure you have the correct access rights 
and the repository exists. 

你需要得到这个命令第一份工作:

ssh [email protected] 

这个问题无关使用Git,你需要获得ssh与公钥认证。

第二个问题是您的存储库的路径可能是错误的。如果您的服务器上的存储库是在.git目录/home/ec2-user/my_test_repo,那么URL将是:

git clone ssh://[email protected]/home/ec2-user/my_test_repo/.git 

公告结束部分my_test_repo/.git,因为它应该对应于包含一个Git目录的文件系统路径库。一个Git仓库包含像HEAD,config这样的文件,以及像objects,refs,hooks和其他一些目录。

因此,它看起来像my_test_repo是所谓的工作树。如果从my_test_repo/.git克隆,您将无法推送到它,因为git不允许使用工作树推送到存储库。它只允许推送到所谓的裸存储库,没有工作树。您可以从现有的非裸存储库中创建一个纯仓库使用这些命令:

git clone --bare my_test_repo my_test_repo.git 

执行此操作后,原来的网址应该工作,因为现在的路径Git仓库实在是my_test_repo.git,而不是my_test_repo/.git 。您不再需要my_test_repo工作树,您可以将其删除。

最后,可以简化存储库的URL是这样的:

git clone [email protected]:my_test_repo.git 
+0

你是对的,其实我的原始答案完全错过了这一点。我现在修好了。 – janos

+0

这帮助了我极大......通过SSH下载一个远程的Git仓库的URL是很多很难得到正确的比它应该是。谢谢! – Matt

2

我终于得到这个工作,从@janos很大的帮助(见上他的评论)。

首先,你需要获得SSH基于公钥认证工作。这与Git无关。

在码头,OSX客户端机器上,我输入了下面的命令:ssh-keygen -t dsa,产生我的本地OSX机器上的SSH密钥。对于每个提示,您都可以输入实际值,或者只需按ENTER(输入值可让您自定义并使SSH过程更安全)。我只是按下了ENTER。

接下来,我将新生成的〜/ .ssh/id_rsa.pub文件(使100%确定它是最后的.pub文件)复制到远程Amazon EC2服务器。但是,我发现这个过程与大多数在线教程的解释有点不同(我认为是因为EC2实例的.pem文件的独特使用)。

在终端的OSX机器上,我cd到包含我的.pem文件所在的目录,然后我进了下面的命令:scp -i JPo.pem ~/.ssh/id_rsa.pub [email protected]:.ssh/authorized_keys

在这一点上,SSH与公共密钥认证,现在应该的工作客户端OSX机器和远程Amazon EC2实例。

现在来的混帐东西,这是非常基本的。我进入下面的命令:git clone ssh://[email protected]/home/ec2-user/my_test_repo/.git

而完成的。有效!

+0

有很多关于建立与公共密钥ssh访问互联网上的文章,这就是为什么我没有详细解释一下。请记住,你将无法推送到这个非裸仓库。你应该按照我给你的步骤创建一个裸仓库,然后使用它。 – janos

+0

@janos Gotcha。我不知道需要“裸”信息才能推送到存储库。我会给它一个镜头(如你所描述的),然后我会相应地编辑我的指示。感谢您所有的帮助! – filmnut

+0

这个要求是因为当你推送时,远程工作树将与存储库不同步。通常Git无法确保远程工作树及其存储库的一致性,这就是为什么默认情况下它拒绝推送非裸回购的原因。 – janos