Wie klonen Sie ein Git-Repository in einen bestimmten Ordner?

2244

Durch Ausführen des Befehls git clone [email protected]:whateverwird ein Verzeichnis in meinem aktuellen Ordner mit dem Namen erstellt whateverund der Inhalt des Git-Repositorys in diesem Ordner abgelegt:

/httpdocs/whatever/public

Mein Problem ist, dass ich den Inhalt des Git-Repositorys in mein aktuelles Verzeichnis klonen muss, damit er am richtigen Speicherort für den Webserver angezeigt wird:

/httpdocs/public

Ich weiß, wie man die Dateien verschiebt, nachdem ich das Repository geklont habe, aber dies scheint Git zu beschädigen, und ich möchte in der Lage sein, nur durch Aufrufen zu aktualisieren git pull. Wie kann ich das machen?

David Smith
quelle
3
Unter Windows können Sie Dateien aus einem Ordner verschieben, in den Sie das Repo klonen (falls vorhanden), damit es beim Git-Klonen leer ist . Nach dem Klonen verschieben Sie Ihre Dateien zurück [Strg-Z] und whoala ! Wenn der aktuelle Ordner leer ist, verwenden Sie einfach: git clone giturl .
44
voila ist die Schreibweise
Matthias
81
@ MatthiasDailey voilà ist die eigentliche Schreibweise
Seidenfeuer
6
et voilà ist französisch für et voilà
Fattie

Antworten:

3221

Option A:

git clone [email protected]:whatever folder-name

Ergo, zur right hereVerwendung:

git clone [email protected]:whatever .

Option B:

Verschieben Sie auch den .gitOrdner. Beachten Sie, dass der .gitOrdner in den meisten Explorer für grafische Dateien ausgeblendet ist. Stellen Sie daher sicher, dass ausgeblendete Dateien angezeigt werden.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

Die erste Zeile erfasst alle normalen Dateien, die zweite Zeile erfasst Punktdateien. Es ist auch möglich, dies in einer Zeile zu tun, indem dotglob (dh shopt -s dotglob) aktiviert wird. Dies ist jedoch wahrscheinlich eine schlechte Lösung, wenn Sie die Frage stellen, auf die diese Antwort antwortet.

Besser noch:

Bewahren Sie Ihre Arbeitskopie an einem anderen Ort auf und erstellen Sie einen symbolischen Link. So was:

ln -s /where/it/is/right/now /the/path/I/want/to/use

Für Sie wäre dies ungefähr so:

ln -sfn /opt/projectA/prod/public /httpdocs/public

Was leicht geändert werden kann, um zu testen, ob Sie es wollten, dh:

ln -sfn /opt/projectA/test/public /httpdocs/public

ohne Dateien zu verschieben. Hinzugefügt, -fnfalls jemand diese Zeilen kopiert ( -fist erzwungen, -nvermeiden Sie einige häufig unerwünschte Interaktionen mit bereits vorhandenen und nicht vorhandenen Links).

Wenn Sie nur möchten, dass es funktioniert, verwenden Sie Option A. Wenn jemand anderes sich ansehen möchte, was Sie getan haben, verwenden Sie Option C.

Kann Berk Güder
quelle
8
Ich hatte nicht an Ihre Option "Noch besser" gedacht, und ich mag sie, obwohl ich nicht sicher bin, warum. Was sind die Vorteile davon?
David Smith
6
Es bietet momentan wahrscheinlich keinen Vorteil, aber es könnte Ihnen viel Ärger ersparen, wenn Sie sich entscheiden, eines Tages etwas zu bewegen.
Kann Berk Güder
12
Außerdem können Sie mit der Option "Noch besser" schnell zwischen Releases wechseln. Dies ist besonders nützlich und wird für Server verwendet.
Halil Özgür
4
@MEM Ich denke, er meint, einen symbolischen Link zu .git zu erstellen, dhln -s path/to/.git path/to/working/directory
Alexander
27
Kann jemand die Vorteile davon erklären? Ich bin heute ein bisschen dicht. Wie profitiert die Verwendung eines Symlink-Servers?
Dreifach
586

Das Beispiel, nach dem viele Leute diese Frage stellen, ist das folgende. Wenn Sie sich in dem Verzeichnis befinden, in das der Inhalt des Git-Repositorys gespeichert werden soll, führen Sie Folgendes aus:

git clone [email protected]:whatever .

Das "." Am Ende wird der aktuelle Ordner als Checkout-Ordner angegeben.

J Wynia
quelle
28
true, daher möchten Sie "git init" nicht in diesem Ordner ausführen, bevor Sie in ihn geklont haben. Wenn Sie dies jedoch getan haben, reicht es aus, den Ordner .git vor dem Klonen zu entfernen.
Magne
3
behoben für leere Verzeichnisse in meiner Antwort
csomakk
1
konnte das nicht in nitrous.io zum Laufen bringen? Auch nach dem Leeren heißt es, dass das Verzeichnis nicht leer ist
Tejas Manohar
@TejasManohar Stellen Sie sicher, dass Sie auch versteckte Dateien gelöscht haben.
Britic
ls -azeigt alle Dateien an, auch versteckte.
Michael Dorst
215

Gehen Sie in den Ordner. Wenn der Ordner leer ist, dann:

git clone [email protected]:whatever .

sonst

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master
csomakk
quelle
9
Eigentlich war dies die nützlichste Antwort für mich, als ich bereits erstelltes Projekt in ein neu erstelltes Repository verschieben musste. Ein großes Lob!
Wirher
13
Nur Antwort, die angibt, wie in einen nicht leeren Ordner ausgecheckt werden soll, danke.
Preston Badeer
2
Dies ist sehr hilfreich, da das Ein switch -tin der Dokumentation der Git-Kaufabwicklung nicht eindeutig angezeigt wird .
Chetabahana
4
Was macht der Schalter -t? Ich erhalte eine Abbruchnachricht mit einer Liste nicht verfolgter Dateien, die beim Auschecken überschrieben werden. Was ist in dieser Situation zu tun? Ich möchte nicht, dass diese Dateien überschrieben werden.
Momin Zahid
2
-t Dokumentation von git: -t, --track Richten Sie beim Erstellen eines neuen Zweigs die "Upstream" -Konfiguration ein. Siehe "--track" in git-branch (1) für Details.
Csomakk
87

Grundlegendes Klonen von Git Repository

Sie klonen ein Repository mit

git clone [url]

Wenn Sie beispielsweise die Drupal Open Framework Git-Bibliothek der Stanford University mit dem Namen open_framework klonen möchten, können Sie dies folgendermaßen tun:

$ git clone git://github.com/SU-SWS/open_framework.git

Dadurch wird ein Verzeichnis mit dem Namen open_framework (an Ihrem aktuellen lokalen Dateisystemspeicherort) erstellt, ein darin enthaltenes .git-Verzeichnis initialisiert, alle Daten für dieses Repository abgerufen und eine Arbeitskopie der neuesten Version ausgecheckt. Wenn Sie in das neu erstellte Verzeichnis open_framework wechseln, werden dort die Projektdateien angezeigt, die bearbeitet oder verwendet werden können.

Klonen eines Repositorys in einen bestimmten lokalen Ordner

Wenn Sie das Repository in ein Verzeichnis mit einem anderen Namen als open_framework klonen möchten, können Sie dies als nächste Befehlszeilenoption angeben:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

Dieser Befehl macht dasselbe wie der vorherige, aber das Zielverzeichnis heißt mynewtheme.

Git verfügt über verschiedene Übertragungsprotokolle, die Sie verwenden können. Im vorherigen Beispiel wird das Protokoll git: // verwendet. Möglicherweise wird jedoch auch http (s): // oder user @ server: /path.git angezeigt, das das SSH-Übertragungsprotokoll verwendet.

Craig Gjerdingen
quelle
Dadurch wird automatisch ein Ordner in Ihrem aktuellen Ordner erstellt und die Dateien dort abgelegt. Sie müssen sich also keine Gedanken über das Überschreiben eines anderen Ordners machen.
Arn-Arn
24

Um das Git-Repository in einen bestimmten Ordner zu klonen, können Sie -C <path>Parameter verwenden, z

git -C /httpdocs clone [email protected]:whatever

whateverVerwenden Sie die folgende Syntax, um den Inhalt des Repositorys in das aktuelle Verzeichnis zu klonen, obwohl weiterhin ein Ordner darüber erstellt wird:

cd /httpdocs
git clone [email protected]:whatever .

Beachten Sie, dass das Klonen in ein vorhandenes Verzeichnis nur zulässig ist, wenn das Verzeichnis leer ist .

Da Sie in einen Ordner klonen, auf den öffentlich zugegriffen werden kann, sollten Sie Ihr Git-Repository von Ihrem Arbeitsbaum trennen, indem Sie --separate-git-dir=<git dir>einen .gitOrdner in Ihrer Webserverkonfiguration verwenden oder ausschließen (z .htaccess. B. in einer Datei).

Kenorb
quelle
17

So klonen Sie auf Present Working Directory :

git clone https://github.com/link.git

So klonen Sie in ein anderes Verzeichnis :

git clone https://github.com/link.git ./Folder1/Folder2

Ich hoffe es hilft :)

Sarat Chandra
quelle
das hat auch bei mir funktioniert. nicht ./am Anfang des Pfades zum Ordner
Alon Gouldman
13

Verschieben Sie das .gitVerzeichnis auch, wenn Sie die Dateien an den gewünschten Ort verschieben ? Abhängig von Ihrem Betriebssystem und Ihrer Konfiguration kann dieses Verzeichnis ausgeblendet sein.

Es enthält das Repo und die unterstützenden Dateien, während die Projektdateien in Ihrem /publicVerzeichnis nur die Versionen im aktuellen Check-out-Commit sind (standardmäßig Hauptzweig).

Paul
quelle
13

Klon:

git clone [email protected]:jittre/name.git

Klonen Sie den "spezifischen Zweig":

git clone -b [branch-name] [email protected]:jittre/name.git
Selvamani
quelle
13

Wenn Sie in den aktuellen Ordner klonen möchten, sollten Sie Folgendes versuchen:

git clone https://github.com/example/example.git ./
Luis
quelle
8
tödlich: Zielpfad '.' existiert bereits und ist kein leeres Verzeichnis.
Cleiton
11

Verwendungszweck

git clone <repository>

Klonen Sie das Repository im <Repository> auf den lokalen Computer. Das ursprüngliche Repository kann sich im lokalen Dateisystem oder auf einem Remotecomputer befinden, auf den über HTTP oder SSH zugegriffen werden kann.

git clone <repo> <directory>

Klonen Sie das Repository unter <Repository> in den Ordner <Verzeichnis> auf dem lokalen Computer.

Quelle: Einrichten eines Repositorys

Nagarjun
quelle
9

Stellen Sie sicher, dass Sie das .git-Repository entfernen, wenn Sie versuchen, das Objekt im aktuellen Verzeichnis auszuchecken.

rm -rf .git dann git clone https://github.com/symfony/symfony-sandbox.git

Alex
quelle
3

Hier ist, wie ich es machen würde, aber ich habe einen Alias ​​gemacht, um es für mich zu machen.

$ cd ~Downloads/git; git clone https:git.foo/poo.git

Es gibt wahrscheinlich eine elegantere Art, dies zu tun, aber ich fand, dass dies für mich selbst am einfachsten ist.

Hier ist der Alias, den ich erstellt habe, um die Dinge zu beschleunigen. Ich habe es für zsh gemacht, aber es sollte gut für Bash oder andere Muscheln wie Fisch, Xyzsh, Fizsh und so weiter funktionieren.

Bearbeiten ~/.zshrc, /.bashrcetc. mit Ihrem bevorzugten Editor (Mine ist Leafpad, so dass ich schreiben würde $ leafpad ~/.zshrc).

Meine persönliche Präferenz ist es jedoch, ein zsh-Plugin zu erstellen, um alle meine Aliase zu verfolgen. Sie können ein persönliches Plugin für oh-my-zsh erstellen, indem Sie die folgenden Befehle ausführen:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

Fügen Sie anschließend diese Zeilen zu Ihrer neu erstellten leeren Datei alises.plugin hinzu:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(Ersetzen Sie von hier aus Ihren Namen durch meinen.)

Damit die Aliase funktionieren, müssen sie (zusammen mit zsh) eingekauft werden (oder wie auch immer es heißt). Fügen Sie dazu in Ihrem benutzerdefinierten Plugin-Dokument Folgendes hinzu:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

Speichern Sie Ihr oh-my-zsh-Plugin und führen Sie es aus allsource. Wenn das nicht zu funktionieren scheint, führen Sie es einfach aus source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Dadurch wird die Plugin-Quelle geladen, die Sie allsourcevon nun an verwenden können.


Ich bin gerade dabei, ein Git-Repository mit all meinen Aliasnamen zu erstellen. Bitte zögern Sie nicht, sie hier zu überprüfen: Evs Punktedateien . Bitte zögern Sie nicht, sie zu gabeln und zu verbessern, um sie Ihren Bedürfnissen anzupassen.

Ev-
quelle
2

Wenn Sie sshfür verwenden git cloning, können Sie den folgenden Befehl verwenden.

git -C path clone [email protected]:path_to_repo.git

Beispiel: git -C /home/ubuntu/ clone [email protected]:kennethreitz/requests.gitWürde das Git-Repository für requestsauf Ihren /home/ubuntu/Pfad ziehen.

Ankit Singh
quelle
2

Aus irgendeinem Grund fällt diese Syntax nicht auf:

git clone repo-url [folder]

Hier ist der Ordner ein optionaler Pfad zum lokalen Ordner (der ein lokales Repository sein wird).

Git clonecodiert auch pullvom Remote-Repository in das lokale Repository. In der Tat ist es wahr:

git clone repo-url  =  git init + git remote add origin repo-url + git pull
Prosti
quelle
0

Obwohl alle oben genannten Antworten gut sind, möchte ich eine neue Methode vorschlagen, anstatt die symbolische Verknüpfungsmethode im öffentlichen HTML-Verzeichnis als BEST in der akzeptierten Antwort zu verwenden. Sie müssen Zugriff auf die virtuellen Hostkonfigurationen Ihres Servers haben.

Es geht darum, den virtuellen Host Ihres Webservers zu konfigurieren, der direkt auf das Repository-Verzeichnis verweist. In Apache können Sie Folgendes tun:

DocumentRoot / var / www / html / website / your-git-repo

Hier ist ein Beispiel für eine virtuelle Hostdatei:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>
Tarik
quelle
0

Sie können den folgenden git-Befehl verwenden, um mit einem benutzerdefinierten Verzeichnisnamen zu klonen

git clone <git_repo_url> <your_custom_directory_name>

Hinweis: Sie müssen Ihr Kundenverzeichnis nicht erstellen, da es automatisch erstellt wird

Manoj Rana
quelle
-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .
Tarit Ray
quelle
-5

Zu dieser Zeile aus dem Originalbeitrag:

"Ich weiß, wie man die Dateien verschiebt, nachdem ich das Repo geklont habe, aber das scheint Git zu brechen."

Ich bin dazu in der Lage und sehe bisher keine Probleme mit meinen Operationen zum Hinzufügen, Festschreiben, Drücken und Ziehen.

Dieser Ansatz ist oben angegeben, jedoch nicht in Schritte unterteilt. Hier sind die Schritte, die für mich funktionieren:

  1. Klonen Sie das Repo in einen neuen temporären Ordner
  2. CD in den Stammordner, den Sie gerade lokal geklont haben
  3. Kopieren Sie den gesamten Inhalt des Ordners, einschließlich des Verzeichnisses /.git, in einen beliebigen Ordner. (Sagen Sie ein Eclipse-Projekt, das Sie mit Ihrem Repo zusammenführen möchten.)

Der vorhandene Ordner, in den Sie die Dateien gerade kopiert haben, kann jetzt mit git interagieren.

Gene Bo
quelle