665 Stimmen

Wie man Git dazu bringt, in das aktuelle Verzeichnis zu klonen

Das tue ich:

git clone ssh://user@host.com/home/user/private/repos/project_hub.git ./

Ich bekomme:

Fatal: Zielpfad '.' existiert bereits und ist kein leeres Verzeichnis.

Ich weiß, dass path . bereits existiert. Und ich kann mir sicher sein, dass das Verzeichnis leer ist (ich mache ls darin und sehe nichts!).

Was fehlt mir hier, um das Projekt in das aktuelle Verzeichnis zu klonen?

10voto

igeocacher Punkte 129

Ich hatte das gleiche Bedürfnis. In meinem Fall hatte ich einen Standard-Webordner, der durch eine Webserver-Installation erstellt wird. Für die Zwecke dieser Illustration nehmen wir an, dies sei

/server/webroot

und webroot enthält andere Standarddateien und -ordner. Mein Repo enthält nur die site-spezifischen Dateien (html, javascript, CFML, etc.)

Alles, was ich tun musste, war:

cd /server/webroot

git init

git pull [url to my repo.git]

Sie müssen darauf achten, dass Sie git init im Zielordner ausführen, denn wenn Sie dies NICHT tun, passiert eines von zwei Dingen:

  1. In meinem Fall wird der Git-Pull einfach mit der Meldung fehlschlagen, dass keine Git-Datei vorhanden ist:

fatal: Kein Git-Repository (oder eines der übergeordneten Verzeichnisse): .git

  1. Wenn es es eine .git-Datei irgendwo im übergeordneten Pfad zu Ihrem Ordner, wird Ihr Projektarchiv in DEM übergeordneten Pfad erstellt, der die .git-Datei enthält. Das ist mir passiert und ich war überrascht ;-)

Dies störte keine der "Standard"-Dateien, die ich in meinem Webroot-Ordner habe, aber ich musste sie zur .gitignore-Datei hinzufügen, um zu verhindern, dass sie versehentlich zu späteren Übertragungen hinzugefügt werden.

Dies scheint eine einfache Möglichkeit zu sein, in ein nicht leeres Verzeichnis zu "klonen". Wenn Sie die .git- und .gitignore-Dateien, die durch den Pull-Vorgang erstellt wurden, nicht benötigen, löschen Sie sie einfach nach dem Pull-Vorgang.

10voto

Jakehao Punkte 1019

Zusätzlich zu der Antwort von @StephaneDelcroix, vor der Verwendung:

git clone git@github.com.user/my-project.git .

Stellen Sie sicher, dass Ihr aktuelles Verzeichnis leer ist, indem Sie

ls -a

9voto

166_MMX Punkte 588

Weitere Verbesserung von @phatblat's responder :

git clone --no-checkout <repository> tmp \
  && mv tmp/.git . \
  && rmdir tmp \
  && git checkout master

als Einzeiler:

git clone --no-checkout <repository> tmp && mv tmp/.git . && rmdir tmp && git checkout master

7voto

phatblat Punkte 3377

Ich verbessere die Antwort von @GoZoner:

git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo

Der Befehl shopt stammt aus diese SO-Antwort und ändert das Verhalten des 'mv'-Befehls auf der Bash so, dass er dotfiles einschließt, die Sie benötigen, um das .git-Verzeichnis und andere versteckte Dateien einzuschließen.

Beachten Sie auch, dass dies nur garantiert funktioniert, wenn das aktuelle Verzeichnis (.) leer ist, aber es wird funktionieren, solange keine der Dateien im geklonten Projektarchiv den gleichen Namen wie die Dateien im aktuellen Verzeichnis haben. Wenn es Ihnen egal ist, was sich im aktuellen Verzeichnis befindet, können Sie die Option -f (force) an den Befehl 'mv' anhängen.

3voto

John Josef Punkte 314
shopt -s dotglob
git clone ssh://user@host.com/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X