606 Stimmen

Wie kann man nur eine einzelne Datei aus einem Git-Repository sparsam auschecken?

Wie kann ich nur eine Datei aus einem Git-Repository auschecken?

11 Stimmen

Was meinen Sie mit Auschecken? Eine Kopie von nur einer Datei aus einem entfernten Repository beziehen?

2 Stimmen

Wenn das betreffende Projektarchiv gitweb verwendet, können Sie die Datei einfach direkt von dort herunterladen. Wie ich weiter unten zu erklären versuche, ist das, was Sie fragen, nicht wirklich ein Standard-Git-Vorgang.

2 Stimmen

3voto

ahprosim Punkte 188

Das funktioniert bei mir. Verwenden Sie git mit einem Shell-Befehl

git clone --no-checkout --depth 1 git.example.com/project.git && cd project && git show HEAD:path/to/file_you_need > ../file_you_need && cd .. && rm -rf project

1 Stimmen

Bitte geben Sie den Code im richtigen Format ein, z. B. git clone --no-checkout --depth 1 git.example.com/project.git && cd project && git show HEAD:path/to/file_you_need > ../file_you_need && cd .. && rm -rf project Versuchen Sie, bei der Eingabe von Codes Strg+K zu verwenden.

3voto

Alex Harvey Punkte 12820

Wenn Sie eine bestimmte Datei benötigen aus einer bestimmten Branche aus einem entfernten Git-Repository lautet der Befehl:

git archive --remote=git://git.example.com/project.git refs/heads/mybranch path/to/myfile |tar xf -

Der Rest lässt sich aus der Antwort von @VonC ableiten:

Wenn Sie eine bestimmte Datei aus dem Master-Zweig benötigen, ist dies der Fall:

git archive --remote=git://git.example.com/project.git HEAD path/to/myfile |tar xf -

Wenn Sie eine bestimmte Datei aus einem Tag benötigen, ist sie das:

git archive --remote=git://git.example.com/project.git mytag path/to/myfile |tar xf -

0 Stimmen

Mother Corp. hat beschlossen, dass der automatische HTTP/S-Zugang jetzt verboten ist! Mit dieser Technik kann ich eine einzelne Datei aus einem Repository automatisiert abrufen, ohne das ganze Ding auszuchecken. Vielen Dank und Hut ab!

2voto

cbuchart Punkte 9696

Eine andere Lösung, die derjenigen ähnlich ist, die --filter=blob:none ist zu verwenden --filter=tree:0 (Sie können eine Erklärung der Unterschiede lesen ici ).

Diese Methode ist in der Regel schneller als die blob -eins, weil es die Baumstruktur nicht herunterlädt, hat aber einen Nachteil. Da Sie das Abrufen des Baums verzögern, haben Sie einen Nachteil, wenn Sie in das Repository-Verzeichnis eintreten (je nach Größe und Struktur Ihres Repositorys kann es im Vergleich zu einem einfachen shallow-clone um ein Vielfaches größer sein).

Wenn das bei Ihnen der Fall ist, können Sie das Problem beheben, indem Sie sich nicht in das Repo eintragen:

git clone -n --filter=tree:0 <repo_url> tgt_dir
git -C tgt_dir checkout <branch> -- <filename>
cat tgt_dir/<filename> # or move it to another place and delete tgt_dir ;)

Wenn Sie mehrere Dateien auschecken müssen, wirkt sich die Baumpopulation auch auf die Leistung aus, daher empfehle ich dies nur für eine einzige Datei und nur, wenn das Projektarchiv groß genug ist, um all diese Aktionen zu rechtfertigen.

1voto

Tim Biegeleisen Punkte 446587

Ich füge diese Antwort als Alternative zu einem formellen Checkout oder einem ähnlichen lokalen Vorgang hinzu. Wenn Sie Zugriff auf die Weboberfläche Ihres Git-Anbieters haben, können Sie jede Datei mit einem bestimmten gewünschten Commit direkt einsehen. Auf GitHub können Sie zum Beispiel etwas verwenden wie:

https://github.com/hubotio/hubot/blob/ed25584f/src/adapter.coffee

Ici ed25584f sind die ersten 8 Zeichen des SHA-1-Hashes der gewünschten Übertragung, gefolgt vom Pfad zur Quelldatei.

Ähnlich können wir es bei Bitbucket versuchen:

https://bitbucket.org/cofarrell/stash-browse-code-plugin/src/06befe08

In diesem Fall setzen wir den Commit-Hash an das Ende der Quell-URL.

1voto

david.perez Punkte 5195

Unter codecommit (git-Version von Amazon AWS) können Sie dies tun:

aws codecommit \
  get-file --repository-name myrepo \
  --commit-specifier master \
  --file-path path/myfile \
  --output text \
  --query fileContent | 
base64 --decode > myfile

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X