wake-up-neo.com

git klone durch ssh

Ich habe ein Projekt, bei dem ich ein Git-Repository erstellt habe:

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

Ich wollte einen nackten Klon auf einem anderen Rechner erstellen:

$ cd ..  
$ git clone --bare myproject  ssh://[email protected]:/GitRepos/myproject.git  

Ich habe den Klon ausgeführt, aber keine Antwort gedruckt. Ich habe mich am Server angemeldet und versucht zu sehen, wie die Dateien gespeichert werden. Der Pfad/GitRepos war leer, also entschied ich mich, den Klon noch einmal zu machen: 

$ git clone --bare myproject  ssh://[email protected]:/GitRepos/myproject.git

Diesmal war die Antwort:

fatal: Zielpfad 'ssh: // user @ server: /GitRepos/myproject.git' ist bereits vorhanden und ist kein leeres Verzeichnis.

Aber ich sah, dass der Pfad leer war.
Was ist denn hier los ?

183
dlsa

Dies hat möglicherweise keinen direkten Zusammenhang mit der Frage; aber ein Fehler, den ich gerade gemacht habe, und ich sehe im OP, ist die URL-Spezifikation ssh://[email protected]:/GitRepos/myproject.git - Sie haben nämlich einen Doppelpunkt : und einen Schrägstrich /, der einen absoluten Pfad angibt.

Ich fand dann Git-Klon, ssh: Hostname konnte nicht aufgelöst werden - git, Entwicklung - Nicolas Kuttler (da dies der Fehler war, den ich auf git Version 1.7.9.5 erhielt);

Das Problem mit dem Befehl, den ich anfangs verwendete, bestand darin, dass ich versuchte, eine SCP-ähnliche Syntax zu verwenden.

... das war auch mein Problem! Grundsätzlich verwenden Sie in git mit ssh entweder 

  • ssh://[email protected]/absolute/path/to/repo.git/ - nur ein Schrägstrich für den absoluten Pfad auf dem Server
  • [email protected]:relative/path/to/repo.git/ - nur ein Doppelpunkt (er darf nicht den ssh:// für den relativen Pfad auf dem Server haben (relativ zum Heimatverzeichnis von username auf dem Server-Computer)

Hoffe das hilft jemandem,
Prost!

186
sdaau

Für Repositorys auf GitHub versuchen Sie Folgendes:

git clone ssh://[email protected]/<user>/<repository name>.git

Wie git per ssh klonen kann, siehe:

99
dsrdakota

Sie müssen den Klonbefehl für das, was Sie den Server aufrufen, ausführen. Ich wette jedoch, dass Sie auf Ihrem lokalen Client keinen SSH-Server betreiben, damit er sowieso nicht funktioniert. Ich schlage vor, Sie folgen diesem Ansatz (siehe Handbuch, da ich dies auswendig mache)

  1. Melden Sie sich am Server an.
  2. Erstellen Sie ein nacktes Repo mit git init --bare 
  3. Auf dem Client-Rechner können Sie Ihr Repo an den Server senden. git remote add Origin ssh://[email protected]:/GitRepos/myproject.git, gefolgt von git Push Origin master
42
Alec the Geek

Git 101:

git ist ein dezentrales Versionskontrollsystem. Sie benötigen keinen Server, um mit git loszulegen. Vielleicht möchten Sie das auch tun, weil es cool aussieht, oder? (Dies ist auch nützlich, wenn Sie an einem einzelnen Projekt von mehreren Computern aus arbeiten möchten.)

Um einen "Server" zum Laufen zu bringen, müssen Sie git init --bare <your_project>.git ausführen, da hierdurch ein leeres Repository erstellt wird, das Sie auf Ihren Maschinen importieren können, ohne dass Sie sich in den Konfigurationsdateien in Ihrem .git-Verzeichnis befinden müssen.

Danach konnten Sie das Repo auf Ihren Clients klonen, da es funktionieren sollte, aber ich habe festgestellt, dass einige Clients (nämlich git-gui) ein vollständig leeres Repo nicht klonen können. Um dies zu umgehen, müssen Sie cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git Push Origin master ausführen. (Beachten Sie, dass Sie möglicherweise Ihren Benutzernamen und Ihre E-Mail-Adresse für den Computer dieses Computers konfigurieren müssen, wenn Sie dies in der Vergangenheit nicht getan haben. Die eigentlichen Befehle, die ausgeführt werden sollen, werden in der Fehlermeldung angezeigt, die Sie erhalten. Ich werde sie daher einfach weglassen.)

An diesem Punkt können Sie das Repository auf jeden Computer klonen, indem Sie einfach git clone <user>@<server>:<relative_path><your_project>.git ausführen. (Wie bereits erwähnt, müssen Sie möglicherweise ssh:// voranstellen, wenn Sie den absoluten Pfad verwenden.) Dies setzt voraus, dass Sie sich bereits von Ihrem Client aus beim Server anmelden können. (Sie erhalten auch Bonuspunkte für das Einrichten einer Konfigurationsdatei und Schlüssel für ssh, wenn Sie beabsichtigen, eine große Menge von Daten an den Remote-Server zu senden.)

Einige relevante Links:
Das sagt Ihnen ziemlich genau, was Sie wissen müssen.
Und dies ist für diejenigen, die die Grundfunktionen von git kennen, aber manchmal die genaue Syntax vergessen.

4
Wolfer

Ich möchte eine Antwort versuchen, die git-flow und drei "Punkte" oder Anwendungsfälle, das zentrale Repository von git, die lokale Entwicklung und die Produktionsmaschine umfasst. Dies ist nicht gut getestet .

Ich gebe unglaublich spezifische Befehle. Anstelle von <your folder> sage ich /root/git. Der einzige Ort, an dem ich den ursprünglichen Befehl ändere, ist, meinen spezifischen Servernamen durch example.com zu ersetzen. Ich werde den Zweck der Ordner erklären, damit Sie ihn entsprechend anpassen können. Bitte lassen Sie mich von jeder Verwirrung wissen und ich werde die Antwort aktualisieren.

Die git-Version auf dem Server ist 1.7.1. Der Server ist CentOS 6.3 (Final).

Die git-Version auf der Entwicklungsmaschine ist 1.8.1.1. Dies ist Mac OS X 10.8.4.

Das zentrale Repository und die Produktionsmaschine befinden sich auf derselben Maschine.

das zentrale Repository, auf das sich svn-Benutzer als 'Server' beziehen können, ist wie folgt konfiguriert. Ich habe einen Ordner /root/git, in dem ich alle meine Git-Repositories aufbewahre. Ich möchte ein Git-Repository für ein Projekt erstellen, das ich "Blumen" nenne.

cd /root/git
git clone --bare flowers flowers.git

Der Befehl git gab zwei Meldungen:

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

Nichts, über das man sich sorgen sollte.

Auf der Entwicklungsmaschine ist wie folgt konfiguriert. Ich habe einen Ordner /home/kinjal/Sites, in den ich alle meine Projekte stecke. Ich möchte jetzt das zentrale Git-Repository erhalten.

cd /home/kinjal/Sites
git clone [email protected]:/root/git/flowers.git

Dies bringt mich zu einem Punkt, an dem ich anfangen kann, Dinge hinzuzufügen. Ich habe zuerst Git Flow eingerichtet

git flow init -d

Standardmäßig ist dies auf Zweig develop. Ich füge hier jetzt meinen Code hinzu. Dann muss ich mich an das zentrale Git-Repository übergeben.

git add .
git commit -am 'initial'
git Push

Zu diesem Zeitpunkt drängte es auf den Entwicklungszweig. Ich möchte dies auch dem Masterzweig hinzufügen.

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git Push

Beachten Sie, dass ich zwischen dem Start der Veröffentlichung und dem Abschluss der Veröffentlichung nichts unternommen habe. Und als ich fertig war, wurde ich aufgefordert, zwei Dateien zu bearbeiten. Dies brachte den Entwicklungszweig zum Meister.

Auf dem Produktionsstandort, der sich auf derselben Maschine wie mein zentrales Git-Repository befindet, möchte ich das Repository in /var/www/vhosts/example.net setzen. Ich habe bereits /var/www/vhosts.

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

Wenn sich die Produktionsmaschine auch auf einer anderen Maschine befinden würde, würde der Befehl git clone aussehen wie auf der Entwicklungsmaschine.

2
Kinjal Dixit

Upfront, mir fehlt etwas an meinen GIT-Fähigkeiten.

Das wird ein nacktes Repository auf Ihrem Computer klonen, der nur die Ordner in .git enthält, die ein verstecktes Verzeichnis sind. Führen Sie ls -al aus und Sie sollten .git oder cd .git in Ihrem Repository sehen.

Können Sie eine Beschreibung Ihrer Absicht hinzufügen, damit jemand mit mehr GIT-Fähigkeiten helfen kann? Was wollen Sie wirklich nicht, wie Sie es vorhaben?

2

Ich habe: Git clone --bare "/ GITREPOSITORIES/RepoA" "ssh: // luc @ EERSTENASDS119J/volume1/RepoA" Ergebnis: Fatal: Zielpfad 'ssh: // luc @ EERSTENASDS119J/volume1/RepoA 'ist bereits vorhanden und ist kein leeres Verzeichnis.

Das System hat ein Verzeichnis ssh: // luc @ EERSTENASDS119J/volume1/RepoA in meinem aktuellen Pfad erstellt.

Daher hat git clone die URL-Spezifikation nicht interpretiert. Die Arbeitsumgehung von Alec wurde verwendet.

0
Luc Depoorter

Disclaimer: Dies ist nur eine Kopie eines Kommentars von bobbaluba , der für zukünftige Besucher besser sichtbar ist. Es hat mir mehr als jede andere Antwort geholfen. 


Sie müssen das Präfix ssh:// löschen, wenn Sie git clone als Beispiel verwenden 

git clone [email protected]:owner/repo.git
0
Pztar