Wie lade ich eine einzelne Datei von GitLab herunter?

Lesezeit: 4 Minuten

Ich weiß, dass es möglich ist, die Kasse mit dem Pfad/zu/Datei abzurufen und dann zu verwenden, um diese bestimmte Datei herunterzuladen.

Mein Problem ist, dass ich eine Datenobergrenze von 1 MB pro Tag habe und git fetch alle Daten trotzdem herunterlädt, auch wenn sie nicht auf Disc gespeichert werden, bis ich git checkout verwende. Ich habe meine Daten trotzdem verwendet

Ist mein Verständnis davon, wie git fetch/checkout richtig ist? Gibt es eine Möglichkeit, eine bestimmte Datei nur herunterzuladen, um zu sehen, ob es eine neue Version gibt, bevor Sie mit dem Download fortfahren?

  • Mögliches Duplikat von How to sparsely checkout only one single file from a git repository?

    – Thomas Weller

    8. Juli 2019 um 22:44 Uhr

  • @ThomasWeller es ist ein anderes Problem.

    Benutzer9409752

    8. Juli 2019 um 23:05 Uhr

Wie lade ich eine einzelne Datei von GitLab herunter
ja2142

Gitlab hat dafür eine Rest-API.

Sie können mit curl eine Datei aus dem Repository abrufen:

curl https://gitlab.com/api/v4/projects/:id/repository/files/:filename\?ref\=:ref

Zum Beispiel:

curl https://gitlab.com/api/v4/projects/12949323/repository/files/.gitignore\?ref\=master

Wenn Ihr Repository nicht öffentlich ist, müssen Sie auch ein Zugriffstoken bereitstellen, indem Sie hinzufügen --header 'Private-Token: <your_access_token>'.


Verbindungen:

Sie können hier überprüfen, wie Sie die Repository-API-ID finden.

API-Dokumentation

Mehr zu Token

Da ist auch ein Python-Bibliothek die diese API verwendet.

Beachten Sie, dass dies eine GitLab-spezifische Lösung ist und nicht für andere Hostings funktioniert.

  • das ist so hilfreich, aber es hat einen Json mit den Metadaten der Datei zurückgegeben, die Rohdatei aus dem Repository abrufen GET /projects/:id/repository/files/:file_path/raw, aber es gibt den Inhalt der Datei zurück, der gut ist, aber ohne Herunterladen der eigentlichen Datei. Gibt es eine Möglichkeit, aktuelle Ordner/Dateien über die API herunterzuladen

    Benutzer9409752

    9. Juli 2019 um 14:53 Uhr


  • Das Json-Feld „Inhalt“ ist base64 der Datei, daher müssen Sie es decodieren, um auf die Originaldatei zugreifen zu können. Wenn Sie die Python-Bibliothek verwenden möchten, wird dies wahrscheinlich für Sie erledigt. Mir ist keine Möglichkeit zum Herunterladen von Verzeichnissen bekannt, aber Sie können dies tun, indem Sie den Projektbaum wie folgt manuell abrufen: https://gitlab.com/api/v4/projects/12949323/repository/tree?path=fonts/Lato und benötigte Dateien einzeln herunterladen. Auch dies wäre mit der Python-Bibliothek einfacher. All dies finden Sie in der API-Dokumentation.

    – ja2142

    9. Juli 2019 um 15:36 Uhr

Um die andere Antwort zu erweitern, ist es (jetzt? Ich weiß nicht, wann diese Funktion hinzugefügt wurde) möglich, nur eine Rohdatei anstelle eines JSON mit einer Base64-Codierung der Datei zu erhalten.

Von dem Dokumentation:

Endpunkt: GET /projects/:id/repository/files/:file_path/raw

Beispiel:

 curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/path%2Fto%2Ffile%2Efoo/raw?ref=master"

Beachten Sie, dass in dem Beispiel der vollständige Pfad zur Datei URL-codiert ist und zu path/to/file.foo führt

  • Das dritte %2F wurde als %2E typisiert

    – trotten

    27. Juli 2021 um 17:31 Uhr

  • das “dritte %2F” ist tatsächlich ein %2E, was ein Punkt ist. im Beispiel ist es file.foo, nicht file/foo.

    – Christian W

    29. Juli 2021 um 18:06 Uhr

  • Was bringt es, %2F und %2E in der URL anstelle von / und zu verwenden? ?

    – Durchsichtiger Coder

    25. Oktober 2021 um 21:27 Uhr

  • / und . sind reservierte Zeichen in URLs. Wenn Sie sie also in einem anderen Kontext verwenden müssen (wie wir es hier tun, wollen wir einen Dateipfad beschreiben), müssen Sie sie codieren. Sehen en.wikipedia.org/wiki/Percent-encoding

    – Christian W

    10. November 2021 um 9:16 Uhr

1647200289 993 Wie lade ich eine einzelne Datei von GitLab herunter
Rubén Pozo

Verwenden von python-gitlab:

#!/usr/bin/python3
import gitlab
import sys


def download_file(host, token, project_name, branch_name, file_path, output):
    try:
        gl = gitlab.Gitlab(host, private_token=token)
        pl = gl.projects.list(search=project_name)
        for p in pl:
            if p.name == project_name:
                project = p
                break
        with open(output, 'wb') as f:
            project.files.raw(file_path=file_path, ref=branch_name, streamed=True, action=f.write)
    except Exception as e:
        print("Error:", e)


num_arguments = len(sys.argv)
if num_arguments < 6:
    print('Usage: ./download-gitlab-file.py host token project_name branch_name file_path output')
else:
    download_file(
        sys.argv[1],
        sys.argv[2],
        sys.argv[3],
        sys.argv[4],
        sys.argv[5],
        sys.argv[6]
    )

Gitlab-Beispiel

Dies funktioniert für mich auf einem lokalen Gitlab:

curl http://mylocalgitlab/MYGROUP/-/raw/master/PATH/TO/FILE.EXT -o FILE.EXT

998830cookie-checkWie lade ich eine einzelne Datei von GitLab herunter?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy