2014-05-20 11 views
5

Ich habe eine Linux-basierte Amazon AMI, die ein Git Repository enthält. Ich möchte git clone dieses Repository zu meinem lokalen OSX-Rechner (der auch Git installiert hat).Git Clone Failure

Das Repository lebt auf der Amazon-Box unter /home/ec2-user/my_test_repo. Innerhalb des Verzeichnisses my_test_repo befindet sich das Verzeichnis .git.

Auf meiner OSX-Maschine kann ich SSH erfolgreich zu der Maschine hosten, die den Repo als ec2-user bewirtet, und ich kann viele Bashbefehle ausführen. Also, ich weiß SSH funktioniert. Allerdings ist der folgende Befehl nicht, wenn ich es von meinem OSX-Rechner auszuführen:

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

ich folgende Fehlermeldung:

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. 

Irgendwelche Ideen, was ich falsch hier?

+0

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

Antwort

6

Das erste Problem ist, dass Sie nicht auf dem Server anmelden kann:

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. 

Sie müssen arbeiten, diesen Befehl erhalten zuerst:

ssh [email protected] 

Dieses Problem hat nichts zu mit Git tun, müssen Sie ssh arbeiten mit Authentifizierung mit öffentlichem Schlüssel.

Das zweite Problem ist, dass der Pfad zu Ihrem Repository wahrscheinlich falsch ist. Wenn Ihr Repository auf dem Server im .git Verzeichnis ist innerhalb/home/ec2-user/my_test_repo, dann würde die URL sein:

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

Hinweis der Endteil my_test_repo/.git ist, weil es auf das Dateisystem Pfad des Verzeichnisses entsprechen sollte einen Git enthält Repository. Ein Git-Repository enthält Dateien wie HEAD, config und Verzeichnisse wie objects, refs, hooks und einige andere.

Als solches sieht es aus wie my_test_repo ist ein so genannter funktionierender Baum. Wenn Sie von my_test_repo/.git klonen, können Sie nicht darauf zugreifen, da git das Verschieben in Repositories mit funktionierendem Baum nicht zulässt. Es erlaubt nur das Schieben auf ein sogenanntes blankes Repository, ohne einen funktionierenden Baum. Sie können mit einem nackten Repository aus Ihrem bestehenden nicht-bare Repository mit diesen Befehlen erstellen:

git clone --bare my_test_repo my_test_repo.git 

Nachdem Sie dies tun, sollten Sie Ihre ursprüngliche URL arbeiten, weil jetzt der Weg zum Git-Repository wirklich my_test_repo.git ist, statt my_test_repo/.git . Sie brauchen den Arbeitsbaum my_test_repo nicht mehr, Sie können ihn löschen.

Schließlich könnten Sie die Repository-URL wie folgt vereinfachen:

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

Sie haben Recht, und tatsächlich meine ursprüngliche Antwort vollständig verpasste den Punkt. Ich habe es jetzt behoben. – janos

+0

Das hat mir enorm geholfen ... die URL zum Herunterladen eines Remote-Git-Repositorys über SSH ist viel schwieriger zu bekommen, als es sein sollte. Vielen Dank! – Matt

2

ich endlich diese Arbeit bekam, mit viel Hilfe von @janos (siehe seine Ausführungen oben).

Zuerst müssen Sie SSH mit Authentifizierung öffentlicher Schlüssel arbeiten. Das hat nichts mit Git zu tun.

Im Terminal auf dem OSX-Client-Rechner habe ich den folgenden Befehl eingegeben: ssh-keygen -t dsa, der die SSH-Schlüssel auf meinem lokalen OSX-Rechner generiert. Für jede Eingabeaufforderung können Sie tatsächliche Werte eingeben oder einfach die EINGABETASTE drücken (durch die Eingabe von Werten können Sie den SSH-Prozess anpassen und ihn sicherer machen). Ich habe gerade ENTER gedrückt.

Als nächstes kopierte ich die neu erzeugte ~/.ssh/id_rsa.pub Datei (100% sicher, es ist die Datei mit .pub am Ende) auf den Remote-Amazon EC2-Server. Ich fand diesen Prozess jedoch etwas anders als die meisten Online-Tutorials (ich denke aufgrund der etwas einzigartigen Verwendung von .pem-Dateien für EC2-Instanzen).

Im Terminal auf der OSX Maschine, ich cd in das Verzeichnis meiner .pem-Datei enthält, und dann trat ich in den folgenden Befehl ein: scp -i JPo.pem ~/.ssh/id_rsa.pub [email protected]:.ssh/authorized_keys

An diesem Punkt ssh mit einem öffentlichen Schlüssel-Authentifizierung nun zwischen der arbeiten sollte Client-OSX-Maschine und die entfernte Amazon EC2-Instanz.

Und jetzt kommt das Git-Zeug, das ziemlich einfach ist. Ich habe folgenden Befehl eingegeben: git clone ssh://[email protected]/home/ec2-user/my_test_repo/.git

Und fertig. Es funktionierte!

+0

Es gibt viele Artikel im Internet über die Einrichtung von SSH-Zugang mit öffentlichen Schlüssel, deshalb habe ich es nicht im Detail erläutert. Denken Sie daran, dass Sie nicht in der Lage sein werden, zu diesem Nicht-Nackt-Repository zu gelangen. Sie sollten den Schritten folgen, die ich Ihnen gegeben habe, um ein bloßes Repository zu erstellen und stattdessen damit arbeiten. – janos

+0

@janos Verstanden. Mir war nicht bewusst, dass die "nackten" Informationen erforderlich waren, um in das Repository zu gelangen. Ich werde es versuchen (wie Sie beschrieben haben), und dann werde ich meine obigen Anweisungen entsprechend bearbeiten. Danke für Ihre Hilfe! – filmnut

+0

Diese Anforderung besteht darin, dass der remote funktionierende Baum beim Drücken nicht mehr mit dem Repository synchronisiert wird. Normalerweise hat Git keine Möglichkeit, die Konsistenz des entfernten Arbeitsbaums und seines Repositories zu gewährleisten, deshalb lehnt es Pushs standardmäßig auf einen nicht leeren Repo ab. – janos