Was ist der effizienteste Mechanismus (in Bezug auf übertragene Daten und verwendeten Speicherplatz), um den Inhalt einer einzelnen Datei aus einem Remote-Git-Repository abzurufen?
Bisher habe ich es geschafft:
git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Das scheint immer noch übertrieben.
Was ist mit mehreren Dateien aus dem Repo?
git
git-checkout
sparse-checkout
git-sparse-checkout
dreftymac
quelle
quelle
Antworten:
In Git Version 1.7.9.5 scheint dies zu funktionieren, um eine einzelne Datei von einer Fernbedienung zu exportieren
Dadurch wird der Inhalt der Datei erfasst
README.md
.quelle
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
um an STDOUT für Rohrleitungen auszugeben, zBFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Im Anschluss an Jakub ‚s Antwort .
git archive
Erzeugt ein Tar- oder Zip-Archiv. Sie müssen also die Ausgabe durch Tar leiten, um den Dateiinhalt zu erhalten:Speichert eine Kopie von 'Dateiname' aus dem HEAD des Remote-Repositorys im aktuellen Verzeichnis.
Das
:path/to/directory
Teil ist optional. Wenn ausgeschlossen, wird die abgerufene Datei in gespeichert<current working dir>/path/to/directory/filename
Wenn Sie die Verwendung von
git archive --remote
Git-Repositorys aktivieren möchten, die von git-daemon gehostet werden, müssen Sie außerdem die Konfigurationsoption daemon.uploadarch aktivieren. Siehe https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlquelle
Wenn eine Weboberfläche bereitgestellt wird (wie gitweb, cgit, Gitorious, ginatra), können Sie damit eine einzelne Datei herunterladen ("rohe" oder "einfache" Ansicht).
Wenn die andere Seite es aktiviert hat , können Sie es verwenden
--remote=<URL>
Option's''des Git-Archivs verwenden (und es möglicherweise auf ein Verzeichnis beschränken, in dem sich die Datei befindet), zum Beispiel:quelle
git config daemon.uploadarch true
im Remote-Repository verwenden. Standardmäßig deaktiviert der Git-Daemon das Remote-Archiv mit "fatal: Remote-Fehler: Zugriff verweigert oder Repository nicht exportiert: ..."git archive
Ansatz war mein erster Versuch - aber dann bemerkte ich, dass das Erfordernistar
auf dem Client-Computer für Windows-Benutzer nicht gerade praktisch war. Am Ende haben wir von unserem lokalencgit
Server abgerufen. Es funktioniert, aber es ist nicht so schnell, wie ich es gerne hätte (und es muss immer nochunix2dos
auf Windows-Computern ausgeführt oder ähnlich sein , da wir Dateien mit Unix-Zeilenenden im Git-Repository speichern).Nicht allgemein, aber wenn Sie Github verwenden:
Für mich
wget
stellte sich heraus, dass die rohe URL der beste und einfachste Weg ist, eine bestimmte Datei herunterzuladen.Öffnen Sie die Datei im Browser und klicken Sie auf "Raw". Aktualisieren Sie nun Ihren Browser, kopieren Sie die URL und führen Sie ein
wget
odercurl
auf.wget Beispiel:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
Curl Beispiel:
curl 'https://example.com/raw.txt' > savedFile.txt
quelle
curl https://example.com/raw.txt > savedFile.txt
So exportieren Sie eine einzelne Datei von einer Fernbedienung:
Dadurch wird die Datei
README.md
in Ihr aktuelles Verzeichnis heruntergeladen .Wenn Sie möchten, dass der Inhalt der Datei nach STDOUT exportiert wird:
Sie können am Ende des Befehls mehrere Pfade angeben.
quelle
Für mich sieht es nach einer Lösung aus: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
wo
4
bedeutet vier Revision von jetzt an und~
ist eine Tilde, wie im Kommentar erwähnt.quelle
git show HEAD:./my_other_file > local_file
wenn die Datei nicht in Ihrem Stammverzeichnis ist :)ich benutze das
quelle
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate.
To connect to raw.github.com insecurely, use '--no-check-certificate'.
Eine nuancierte Variante einiger Antworten hier, die die Frage des OP beantwortet:
quelle
Wenn Ihr Repository Token unterstützt (z. B. GitLab), generieren Sie ein Token für Ihren Benutzer. Navigieren Sie dann zu der Datei, die Sie herunterladen möchten, und klicken Sie auf RAW-Ausgabe, um die URL abzurufen. Um die Datei herunterzuladen, verwenden Sie:
quelle
Ich habe auf diese Weise gelöst:
Wenn Sie möchten, können Sie "BranchName" durch "HEAD" ersetzen.
quelle
Es scheint mir der einfachste Weg zu sein, Folgendes zu verwenden:
quelle
Die Antwort von Yisrael Dov ist unkompliziert, erlaubt jedoch keine Komprimierung. Sie können dies verwenden
--format=zip
, aber Sie können es nicht direkt mit einem Pipe-Befehl entpacken, wie Sie es mit tar tun können. Daher müssen Sie es als temporäre Datei speichern. Hier ist ein Skript:Dies funktioniert auch mit Verzeichnissen.
quelle
Verwenden Sie für einzelne Dateien einfach den Befehl wget.
Folgen Sie zunächst dem Bild unten, um auf "raw" zu klicken und die URL abzurufen. Andernfalls laden Sie den in HTML eingebetteten Code herunter.
Dann öffnet der Browser eine neue Seite mit URL-Start mit https://raw.githubusercontent.com/ ...
Geben Sie einfach den Befehl in das Terminal ein:
Eine Weile wird die Datei in Ihrem Ordner abgelegt.
quelle
Wenn Ihr Git-Repository auf Azure-DevOps (VSTS) gehostet wird, können Sie eine einzelne Datei mit der Rest-API abrufen .
Das Format dieser API sieht folgendermaßen aus:
Beispielsweise:
quelle
Ich verwende Curl, es funktioniert mit öffentlichen Repos oder solchen, die die https-Basisauthentifizierung über eine Webschnittstelle verwenden.
curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
Ich habe es auf Github und Bitbucket getestet, funktioniert auf beiden.
quelle
Wenn Sie eine Datei von einem bestimmten Hash + einem Remote-Repository erhalten möchten, habe ich git-archive ausprobiert und es hat nicht funktioniert.
Sie müssten den Git-Klon verwenden und sobald das Repository geklont ist, müssten Sie das Git-Archiv verwenden, damit es funktioniert.
Ich poste eine Frage, wie man es im Git-Archiv von einem bestimmten Hash von Remote einfacher macht
quelle
Für Bitbucket direkt aus dem Browser (ich habe Safari verwendet ...) klicken Sie mit der rechten Maustaste auf "View Raw" und wählen Sie "Linked File herunterladen":
quelle
Wenn es Ihnen nichts ausmacht, das gesamte Verzeichnis zu klonen, führt diese kleine bash / zsh-Funktion zum Klonen einer einzelnen Datei in Ihr aktuelles Verzeichnis (indem Sie das Repo in ein temporäres Verzeichnis klonen und anschließend entfernen).
Pro: Sie erhalten nur die gewünschte Datei
Con: Sie müssen immer noch warten, bis das gesamte Repo geklont ist
quelle
Github Enterprise-Lösung
quelle
GITHUB_PERSONAL_ACCESS_TOKEN
?Wenn Sie nur die Datei herunterladen möchten, wird eine problemlose Anwendung namens aufgerufen
gget
:Das obige Beispiel würde eine einzelne Datei aus dem
hugo
Repository herunterladen .https://github.com/dpb587/gget
quelle
Im Zusammenhang mit der Antwort von @Steven Penny verwende ich auch wget. Um zu entscheiden, an welche Datei die Ausgabe gesendet werden soll, verwende ich -O.
Wenn Sie gitlabs verwenden, ist eine andere Möglichkeit für die URL:
Sofern Sie nicht über das Zertifikat verfügen oder von einem vertrauenswürdigen Server aus auf die Installation von gitlabs zugreifen, benötigen Sie --no-check-certificate, wie @Kos sagte. Ich bevorzuge das, anstatt .wgetrc zu ändern, aber es hängt von Ihren Bedürfnissen ab.
Wenn es sich um eine große Datei handelt, können Sie die Option -c mit wget verwenden. Um die Datei weiterhin von der Stelle herunterladen zu können, an der Sie sie hinterlassen haben, wenn die vorherige Absicht in der Mitte fehlgeschlagen ist.
quelle