2014-05-20 254 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