Rufen Sie eine einzelne Datei aus einem Repository ab
Lesezeit: 6 Minuten
Was ist der effizienteste Mechanismus (in Bezug auf die übertragenen Daten und den verwendeten Speicherplatz), um den Inhalt einer einzelnen Datei aus einem entfernten Git-Repository abzurufen?
Bisher ist mir folgendes gelungen:
git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Das wirkt immer noch übertrieben.
Was ist mit dem Abrufen mehrerer Dateien aus dem Repo?
Ah. Ich würde es lieben, wenn es eine eingebaute Möglichkeit gäbe, das Äquivalent von “cat-remote” und “tag-remote” zu machen.
– conni
7. Juli 2010 um 11:27 Uhr
Ich habe dasselbe Problem. Ich möchte dieselbe Lizenzdatei in 2 Repos haben. Bearbeiten Sie die Datei in 1 Repo und aktualisieren Sie dann automatisch die Kopie im anderen Repo.
– GlassGhost
26. Januar 2011 um 11:04 Uhr
Mögliches Duplikat von How to checkout only one file from git repository?
– Ciro Santilli Путлер Капут 六四事
30. März 2016 um 10:48 Uhr
Israel Dov
In Git-Version 1.7.9.5 scheint dies zu funktionieren, um eine einzelne Datei von einer Fernbedienung zu exportieren
git archive --remote=ssh://host/pathto/repo.git HEAD README.md
Dadurch wird der Inhalt der Datei kategorisiert README.md.
Dies scheint nicht die Rohdatei zu ergeben, sondern eine Tar-Datei mit nur einer einzigen Datei.
– Frerich Raabe
10. März 2014 um 19:58 Uhr
@FrerichRaabe füge einfach ` | hinzu tar -x` auf den Befehl. git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xcat README.md
– Renier
21. Mai 2015 um 18:46 Uhr
Sie können verwenden tar -xO zur Ausgabe an STDOUT für Rohrleitungen, z FILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
– paulcm
25. August 2015 um 11:56 Uhr
Genau die Antwort, nach der ich gesucht habe, aber ich bekomme “fatal: Operation not supported by protocol”. als Antwort von Git. Argh.
– mhvelplund
18. Februar 2016 um 8:06 Uhr
Robert Ritter
Anknüpfend an Jakubs Antwort. git archive erzeugt ein tar- oder zip-Archiv, also müssen Sie die Ausgabe durch tar leiten, um den Dateiinhalt zu erhalten:
git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x
Speichert eine Kopie von „Dateiname“ aus dem HEAD des entfernten Repositorys im aktuellen Verzeichnis.
Die :path/to/directory Teil ist optional. Wenn ausgeschlossen, wird die abgerufene Datei gespeichert <current working dir>/path/to/directory/filename
Wenn Sie außerdem die Verwendung von aktivieren möchten git archive --remote Auf Git-Repositorys, die von git-daemon gehostet werden, müssen Sie die Konfigurationsoption daemon.uploadarch aktivieren. Sehen https://kernel.org/pub/software/scm/git/docs/git-daemon.html
Wenn es sich um eine Textdatei handelt und wir sie in einem anderen Teil speichern möchten, verwenden Sie am besten: | tar -xO > ~/destfile.ext
– Yucer
15. Juli 2015 um 10:52 Uhr
Funktioniert es mit einem bestimmten Commit? (dh man gibt sowohl eine bestimmte Datei als auch einen Commit an)
– Alleo
11. November 2021 um 23:26 Uhr
Jawohl. Ersetzen HEAD mit der Commit-ID, die Sie verwenden möchten. HEAD ist ein Alias, der sich entweder auf den aktuell ausgecheckten Commit (falls zutreffend) oder die Spitze des Standardzweigs bezieht. Ich habe die obige Antwort vor Jahren geschrieben und heute Morgen erfahren, dass GitHub keine Unterstützung bietet git archivedas macht es viel weniger nützlich.
– Robert Ritter
13. November 2021 um 6:50 Uhr
Wenn da ist Webinterface bereitgestellt (wie gitweb, cgit, Gitorious, ginatra), können Sie damit einzelne Dateien herunterladen (‘raw’ oder ‘plain’ view).
Wenn andere Seite aktiviert eskönnen Sie verwenden git-Archiv‘S ‘--remote=<URL>‘ Option (und möglicherweise auf ein Verzeichnis beschränken, in dem sich eine bestimmte Datei befindet), zum Beispiel:
Für Ihre eigenen Repositories müssen Sie Upload-Archive ausdrücklich aktivieren, wenn Sie git-daemon (URLs im Stil von git://) mit verwenden git config daemon.uploadarch true auf dem Remote-Repository. Standardmäßig deaktiviert der Git-Daemon das Remote-Archiv mit „fatal: remote error: access denied or repository not exported: …“
– Patthoyten
7. Februar 2013 um 9:34 Uhr
+1 Die git archive Ansatz war mein erster Versuch – aber dann bemerkte ich, dass es erforderlich war tar auf dem Client-Rechner war für Windows-Benutzer nicht gerade praktisch. Am Ende haben wir von unserem Einheimischen abgeholt cgit Server. Es funktioniert, aber es ist nicht so schnell, wie ich es gerne hätte (und es muss immer noch laufen unix2dos oder ähnlich auf Windows-Rechnern, da wir Dateien mit Unix-Zeilenenden im Git-Repository speichern).
– Frerich Raabe
10. März 2014 um 19:47 Uhr
@FrerichRaabe Verwenden Sie -o fetched.zip. Siehe auch Option –format=.
Nicht im Allgemeinen, aber wenn Sie Github verwenden:
Für mich wget an die Roh-URL, erwies sich als der beste und einfachste Weg, eine bestimmte Datei herunterzuladen.
Öffnen Sie die Datei im Browser und klicken Sie auf die Schaltfläche „Raw“. Aktualisieren Sie jetzt Ihren Browser, kopieren Sie die URL und führen Sie a wget oder curl darauf.
wo 4 bedeutet vier Überarbeitung von jetzt an und ~ ist eine Tilde, wie im Kommentar erwähnt.
ich benutze das
$ cat ~/.wgetrc
check_certificate = off
$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
Funktioniert für mich auch ohne wgetrc-Optimierungen: wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
– Adobe
3. September 2012 um 7:54 Uhr
Meine Nachricht ist hilfreicher: 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'.
– Kos
18. Januar 2013 um 13:42 Uhr
Dies funktioniert nur für öffentliche Repositories. Für private Repositorys benötigen Sie eine Authentifizierung.
– Rikas
5. Januar 2015 um 18:27 Uhr
9646600cookie-checkRufen Sie eine einzelne Datei aus einem Repository abyes
Ah. Ich würde es lieben, wenn es eine eingebaute Möglichkeit gäbe, das Äquivalent von “cat-remote” und “tag-remote” zu machen.
– conni
7. Juli 2010 um 11:27 Uhr
Ich habe dasselbe Problem. Ich möchte dieselbe Lizenzdatei in 2 Repos haben. Bearbeiten Sie die Datei in 1 Repo und aktualisieren Sie dann automatisch die Kopie im anderen Repo.
– GlassGhost
26. Januar 2011 um 11:04 Uhr
Mögliches Duplikat von How to checkout only one file from git repository?
– Ciro Santilli Путлер Капут 六四事
30. März 2016 um 10:48 Uhr