Ich möchte ein GIT-Repo klonen und NICHT mit einem .git
Verzeichnis enden . Mit anderen Worten, ich möchte nur die Dateien. Gibt es eine Möglichkeit, dies zu tun?
git clone --no-checkout
tat genau das Gegenteil von dem, was ich will (gab mir nur das .git
Verzeichnis).
Ich versuche dies für ein Remote- Repo zu tun , nicht für ein lokales, was bedeutet, dass dies kein Duplikat ist von " Wie man einen" Git-Export "(wie" SVN-Export ") macht " ist (obwohl die Lösung möglicherweise die ist gleich).
git archive
Ist jetzt (4. Quartal 2017) genauer und enthält keine leeren Ordner.Antworten:
Der git-Befehl, der dem, was Sie suchen, am nächsten kommt, würde von
git archive
.Siehe Sichern eines Projekts, das git verwendet : Es enthält alle Dateien in einem Archiv (einschließlich Submodule, wenn Sie das
git-archive-all
Skript verwenden).Sie können dieses Archiv dann überall verwenden und nur Dateien und kein
.git
Verzeichnis zurückgeben.Wenn Sie Ordner und Dateien nur von der ersten Ebene benötigen:
So listen Sie nur Ordner der ersten Ebene eines Remote-Repos auf:
Hinweis: Das funktioniert nicht für GitHub (nicht unterstützt)
Sie müssten also klonen (flach, um den Klonschritt zu beschleunigen) und dann lokal archivieren :
Eine andere Möglichkeit wäre, einen flachen Klon (wie unten erwähnt) zu erstellen, aber den .git-Ordner an einer anderen Stelle zu suchen.
Der Repo-Ordner würde nur die Datei enthalten, ohne
.git
.Hinweis:
git --git-dir
ist eine Option des Befehlsgit
, nichtgit clone
.Update mit Git 2.14.X / 2.15 (Q4 2017): Es wird sichergestellt, dass keine leeren Ordner hinzugefügt werden .
Siehe Commit 4318094 (12. September 2017) von René Scharfe (``) .
Vorgeschlagen von: Jeff King (
peff
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 62b1cb7 , 25. September 2017)quelle
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
bekomme ichtar: This does not look like a tar archive
. Funktioniert es nicht mit GitHub? Was bedeutet das@
auch?@
: Ich habe es entfernt. Auch GitHub unterstützt keine Fernbedienunggit archive
: Ich habe die Antwort bearbeitet, um eine Alternative vorzuschlagen.von hier genommen
quelle
--format=tar
ist unnötig. "tar" ist die Standardausgabe, die nicht angegeben werden muss.tar x
ist ausreichendSie können einen flachen Klon erstellen, um nur die letzten Revisionen zu erhalten:
Löschen Sie dann entweder einfach das .git-Verzeichnis oder
git archive
exportieren Sie Ihren Baum.quelle
Warum nicht einen Klon durchführen und dann den löschen?
.git
Verzeichnis sodass Sie nur eine bloße Arbeitskopie haben?Bearbeiten: Oder warum überhaupt Klon verwenden? Es ist etwas verwirrend, wenn Sie sagen, dass Sie ein Git-Repo wollen, aber ohne
.git
Verzeichnis. Wenn Sie meinen, dass Sie nur eine Kopie eines bestimmten Status des Baums möchten, können Sie diescp -R
in der Shell anstelle des Git-Klons tun und anschließend löschen.git
.quelle
Es hört sich so an, als wollten Sie nur eine Kopie des Quellcodes. Wenn ja, warum nicht einfach das Verzeichnis kopieren und das .git-Verzeichnis von der Kopie ausschließen?
quelle
Git Checkout -f
Es gibt eine andere Möglichkeit, dies zu tun, indem Sie das Repo vom Arbeitsbaum trennen.
Diese Methode ist nützlich, wenn Sie diese Git-Dateien ohne Git regelmäßig aktualisieren müssen. Zum Beispiel verwende ich es, wenn ich Quelldateien auschecken und ein Artefakt erstellen muss, dann kopiere ich das Artefakt in ein anderes Repo, nur um es auf einem Server bereitzustellen, und ich verwende es auch, wenn ich Quellcode auf einen Server schiebe, wenn ich das möchte Quellcode zum Auschecken und Einbauen in das WWW-Verzeichnis.
Wir werden zwei Ordner erstellen, einen für den Git und einen für die Arbeitsdateien:
Initialisiere ein nacktes Git-Repo:
Erstellen Sie dann einen Post-Receive-Hook:
Bearbeiten Sie Post-Receive in Ihrem Lieblingseditor:
Fügen Sie dies als Fernbedienung hinzu:
Jedes Mal, wenn Sie auf dieses nackte Repo klicken, wird der Arbeitsbaum ausgecheckt
/workingfiles/
. Aber/workingfiles/
selbst ist nicht unter Versionskontrolle; läuftgit status
in/workingfiles/
dem Fehler gebenfatal: Not a git repository (or any parent up to mount point /data)
. Es sind nur einfache Dateien.Im Gegensatz zu anderen Lösungen wird der
rm -r .git
Befehl nicht benötigt. Wenn/workingfiles/
es sich also um ein anderes Git-Repo handelt, müssen Sie sich keine Gedanken über den Befehl machen, mit dem die Git-Dateien des anderen Repos entfernt werden.quelle
Sehr einfach IMHO:
git clone REPO_URL
dann.git
Verzeichnis mitrm -rf ./REPO_NAME/.git
aus dem Repo.Wenn der Name meines Repositorys beispielsweise lautet
MyRepo
, um dieses Repo ohne Metadaten zu erhalten, könnte ich entweder Folgendes ausführen:Oder ich könnte es in ein bestimmtes Verzeichnis bringen (sagen wir in einem Verzeichnis namens
MyDir
):Hoffentlich hilft das.
quelle
.git
Verzeichnis zu entfernen .