Git-Klon ohne .git-Verzeichnis

144

Gibt es ein Flag, an das gitbeim Klonen übergeben werden kann, z. B. das .gitVerzeichnis nicht klonen ? Wenn nicht, wie wäre es mit einem Flag zum Löschen des .gitVerzeichnisses nach dem Klonen?

Justin
quelle
41
Diese Frage ist kein Betrug bei der Durchführung eines "Git-Exports" (wie "SVN-Export") . Diese Frage stellt, wie man klonen ein (remote) Repository ohne das .gitVerzeichnis. Der mutmaßliche Betrüger fragt, wie ein vorhandenes Repository exportiert werden soll, in dem Sie bereits über das .gitVerzeichnis verfügen .
Mknaf
3
Zustimmen. Sie können kein git archiveRemote-Repository erstellen, wie in der Lösung "Mögliches Duplikat" angegeben.
Vladislav Rastrusny

Antworten:

214

Verwenden

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • Mit der Tiefenoption wird sichergestellt, dass möglichst wenig Verlauf kopiert wird, um das Repo zu erhalten.
  • Die Verzweigungsoption ist optional und würde, wenn nicht angegeben, den Master erhalten.
  • In der zweiten Zeile wird Ihr Verzeichnis erstellt dirformynewrepo nicht mehr zu einem Git-Repository.
  • Wenn Sie einen rekursiven Submodul-Klon ausführen, gelten die Parameter Tiefe und Verzweigung nicht für die Submodule.
Adam Dymitruk
quelle
19
was tut !$/.gitbedeuten?
Jürgen Paul
15
Für Interessierte ist es einer der Wortbezeichner , der Teil der Funktion zur Erweiterung der Geschichte in Bash und zsh ist.
Rufflewind
Gibt es eine Möglichkeit, die Tiefe = 1 aller Zweige im Repo zu ermitteln? nicht nur Meister oder spezifizierter Zweig
Gayan Pathirage
2
Sie tun dies mit der Option --no-single-branch, da --depth --single-branch impliziert, können Sie dies mit --no-single-branch aufheben. (Entnommen aus der Manpage des Git-Klons)
Robert Stoddard
8
Die Verwendung !$ist in diesem Fall zwar technisch korrekt, trägt jedoch nicht dazu bei, dass Personen, die die Syntax nicht erkennen, die Antwort auf die eigentliche Frage verstehen. Es basiert auch auf dem zweiten Befehl direkt nach dem ersten und innerhalb derselben Shell. Wenn jemand diese impliziten Anforderungen auslässt, wird er möglicherweise etwas ganz anderes löschen. Daher schlage ich vor, dass Ihre Antwort verbessert werden könnte, indem Sie den Namen explizit dirformynewrepoals Argument für den rmBefehl angeben, da dadurch die Verbindung zwischen beiden Befehlen viel klarer wird.
DavidA
29

Da Sie nur die Dateien möchten, müssen Sie sie nicht als Git-Repo behandeln.

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .

Dies funktioniert nur mit dem lokalen Pfad und dem Remote-Pfad ssh / rsync. Möglicherweise funktioniert dies nicht, wenn der Remote-Server nur den Zugriff auf git: // oder https: // bereitstellt.

Huang Tao
quelle
das wird .gitignore nicht berücksichtigen?
JJ Roman
itub ist richtig, dies kopiert nur den Arbeitsbaum. Git Checkout hat das früher richtig gemacht, jetzt nicht mehr.
Sylvain
Was machen Sie also, wenn der Server nur git: // access bereitstellt?
Rainb
3

Wenn Sie Node.js installiert haben, können Sie alternativ den folgenden Befehl verwenden:

npx degit GIT_REPO

npxwird mit Node geliefert und ermöglicht es Ihnen, binärknotenbasierte Pakete auszuführen, ohne sie zuerst zu installieren (alternativ können Sie sie zuerst degitglobal mit installieren npm i -g degit).

Degit ist ein Tool von Rich Harris, dem Erfinder von Svelte und Rollup, mit dem er schnell ein neues Projekt erstellt, indem er ein Repository klont, ohne den Git-Ordner zu behalten. Es kann aber auch verwendet werden, um ein Repo einmal zu klonen ...

Erik Vullings
quelle
-1

Das kannst du immer tun

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git

quelle
44
alles herunterladen und das dir später löschen? Zum Beispiel hat emacs 95% von 1 GB in der .git. also --depth = 1 ist hier eindeutig die Lösung.
RParadox
1
Ich sehe immer noch den .git-Ordner, wenn ich Tiefe = 1 mache
Aryeh Armon
@ AryehArmon natürlich siehst du es. Die Verwendung von --depth verhindert nicht die Erstellung von .git, sondern macht es nur zu einer flachen Kopie, die für .git viel kleiner ist. Aber wenn Sie es dort überhaupt nicht wollen, müssen Sie es anschließend entfernen.
Zeycus