2014-05-20 24 views
5

Ho un AMI Amazon basato su Linux che ospita un repository Git. Voglio importare l'archivio git clone sul mio computer OSX locale (che ha anche installato Git).Git Clone Failure

Il repository abita nella casella Amazon al numero /home/ec2-user/my_test_repo. All'interno della directory my_test_repo si trova la directory .git.

Sulla mia macchina OSX posso con successo SSH alla macchina che ospita il repository come ec2-user e posso eseguire molti comandi bash. Quindi so che SSH funziona. Tuttavia, il seguente comando non funziona quando eseguo dal mio macchina OSX:

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

ottengo il seguente messaggio di errore:

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. 

Tutte le idee che cosa sto facendo male qui?

+0

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

risposta

6

Il primo problema è che non si può accedere al server:

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. 

è necessario per ottenere questo comando lavorando prima:

ssh [email protected] 

Questo problema non ha nulla a fare con Git, è necessario ottenere ssh lavorando con l'autenticazione della chiave pubblica.

Il secondo problema è che probabilmente il percorso del repository è sbagliato. Se il repository sul server è nella .git directory all'interno/home/ec2-user/my_test_repo, l'URL sarebbe:

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

Avviso la parte finale è my_test_repo/.git, perché dovrebbe corrispondere al percorso del file system della directory contenente un Git repository. Un repository Git contiene file come HEAD, config e directory come objects, refs, hooks e altri.

Come tale, appare come è un cosiddetto albero di lavoro . Se cloni da my_test_repo/.git, non sarai in grado di inviarlo, perché git non consente di accedere agli archivi con la struttura di lavoro. Permette solo di spingere al cosiddetto repository , senza un albero di lavoro. È possibile creare un repository nudo dal repository non-nuda esistenti con questi comandi:

git clone --bare my_test_repo my_test_repo.git 

Dopo avere effettuato questa, l'URL originale dovrebbe funzionare, perché ora il percorso del repository Git è davvero my_test_repo.git, invece di my_test_repo/.git . Non hai più bisogno dell'albero di lavoro my_test_repo, puoi cancellarlo.

Infine, si potrebbe semplificare l'URL del repository in questo modo:

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

Hai ragione, e in realtà la mia risposta originale ha completamente ignorato il punto. L'ho risolto ora. – janos

+0

Questo mi ha aiutato enormemente ... l'URL per scaricare un repository git remoto tramite SSH è molto più difficile da ottenere di quanto dovrebbe. Grazie! – Matt

2

finalmente ho potuto iniziare questo lavoro, con un sacco di aiuto da @janos (vedere i suoi commenti sopra).

In primo luogo, è necessario ottenere ssh che funzioni con l'autenticazione della chiave pubblica. Questo non ha nulla a che fare con Git.

In Terminale, sul computer client OSX, ho inserito il seguente comando: ssh-keygen -t dsa, che genera le chiavi SSH sul mio computer OSX locale. Per ognuno dei prompt, è possibile immettere valori effettivi o premere semplicemente INVIO (immettere i valori consente di personalizzare e rendere il processo SSH più sicuro). Ho appena premuto INVIO.

Successivamente, ho copiato il appena generato// file di ~ .ssh id_rsa.pub (fare al 100% che sia il file con estensione pub alla fine) al server Amazon EC2 remoto. Tuttavia, ho trovato questo processo un po 'diverso da quello che spiegano la maggior parte dei tutorial online (penso a causa dell'uso un po' unico dei file .pem per le istanze EC2).

In Terminal sulla macchina OSX, ho cd nella directory contenente il mio file .pem, e poi sono entrato nel seguente comando: scp -i JPo.pem ~/.ssh/id_rsa.pub [email protected]:.ssh/authorized_keys

A questo punto, ssh con autenticazione a chiave pubblica deve essere ora di lavoro tra la macchina OSX client e istanza Amazon EC2 remota.

E ora arriva la roba di Git, che è piuttosto semplice. Ho inserito il seguente comando: git clone ssh://[email protected]/home/ec2-user/my_test_repo/.git

E fatto. Ha funzionato!

+0

Ci sono molti articoli su internet sulla configurazione dell'accesso ssh con chiave pubblica, ecco perché non l'ho spiegato in dettaglio. Tieni presente che non sarai in grado di inviare questo repository non nudo. Dovresti seguire i passaggi che ti ho dato per creare un repository nudo e lavorare con quello. – janos

+0

@janos Gotcha. Non ero a conoscenza del fatto che fossero necessarie le informazioni "nude" per poter inviare al repository. Darò un colpo (come hai descritto), e quindi modificherai le mie istruzioni sopra di conseguenza. Grazie per tutto il vostro aiuto! – filmnut

+0

Questo requisito è dovuto al fatto che quando si preme, l'albero di lavoro remoto non sarà più sincronizzato con il repository. Normalmente Git non ha modo di garantire la coerenza dell'albero di lavoro remoto e del suo repository, è per questo che rifiuta di spingere su un repository non nudo di default. – janos