Wo werden git-lfs-Dateien gespeichert?

70

Ich versuche herauszufinden, wie man git-lfs benutzt. Ich benutze einen Gitlab EE Server.

Vielleicht habe ich etwas verpasst, aber ich habe keine Dokumentation zu git-lfs gefunden, die über ein sehr kurzes Tutorial hinausgeht, in dem der Befehl "track" und niedliche 1-minütige Videos vorgestellt werden.

Zum Beispiel füge ich eine 3,7-GB-TAR-Datei in einem Repo hinzu, verfolge sie und schiebe sie:

git lfs track "*.tar"
cp <a folder>/a.tar .
git add a.tar 
git commit -m "add a.tar"
git push origin master

Frage 1 : Wurde am Ende dieses Vorgangs a.tar auf den Gitlab-Server hochgeladen? Es ist unklar, da die Befehle "Hinzufügen" und "Festschreiben" einige Zeit in Anspruch nahmen (möglicherweise nicht lange genug, um mich zu fragen, ob die 3,7 GB während dieser Zeit hochgeladen wurden), aber der Push dauerte überhaupt keine Zeit (ein Bruchteil von zweite).

Frage 2 : Wenn die Datei auf den Server hochgeladen wurde, wo? Offensichtlich nicht am selben Ort wie das Repo (das ist der Punkt). Ich habe gefragt, weil mein Server gesichert wird, und ich muss wissen, ob ich für die Verwendung von git-lfs dies in irgendeiner Weise aktualisieren muss.

Frage 3 : Wenn die Datei nicht hochgeladen wurde, bedeutet dies, dass andere Benutzer des Repos den Link zu der Datei auf dem ursprünglichen Computer erhalten, auf dem die Datei hinzugefügt wurde? Gibt es eine Möglichkeit, dies in einen Speicherort auf dem Server zu ändern? (zurück zu Frage 2)

Frage 4 : Nach dem Klonen des Repos ist tatsächlich nicht die vollständige 3.4G-Datei vorhanden, sondern "nur" eine Textdatei mit dem Inhalt:

version https://git-lfs.github.com/spec/v1
oid sha256:4bd049d85f06029d28bd94eae6da2b6eb69c0b2d25bac8c30ac1b156672c4082
size 3771098624

Das ist natürlich großartig und der springende Punkt. Was aber, wenn Zugriff auf die vollständige Datei erforderlich ist? Wie lade ich es herunter?

Ich würde mich über eine direkte Antwort auf diese Frage oder einen Link zu einer ordnungsgemäßen Dokumentation freuen.

Vince
quelle

Antworten:

42

Antwort 1 Wie in diesem Video (um 1:27) erläutert , wird beim Pushen einer von git lfsihr verfolgten Datei abgefangen und auf einem anderen Server abgelegt, wobei ein Zeiger in Ihrem Git-Repository verbleibt. Wie Sie in der Referenz in Frage 4 sehen, hat dies für Sie funktioniert.

Antwort 2 Das ist etwas kniffliger. Wenn git lfs smudgewir die Dokumentation lesen , haben wir:

Lesen Sie eine Git LFS-Zeigerdatei aus der Standardeingabe und schreiben Sie den Inhalt der entsprechenden großen Datei in die Standardausgabe. Laden Sie bei Bedarf den Inhalt der Datei vom Git LFS-Endpunkt herunter. Das Argument wird, falls angegeben, nur für einen Fortschrittsbalken verwendet.

Der git lfsEndpunkt kann aus der Ausgabe von ermittelt werden git lfs env. Mein "Endpunkt" ist ein Ordner unter (aber nicht in) meinem Repository, was mich glauben lässt, dass GitLab ein Git-Repository auf dem Server in unserem Kontobereich erstellt, um Binärdateien zu speichern.

Das heißt, ich weiß nicht, wie Sie dies sichern würden. GitHub bietet einen git lfsServer , der sich "nicht in einem produktionsbereiten Zustand" befindet. Daher müssten Sie einige Arbeiten ausführen, um ihn so einzurichten, dass Ihre Binärdateien auf einen von Ihnen verwalteten Server hochgeladen werden. Wenn die Sicherung dieser Dateien auf eine Priorität ist und Sie nicht wollen , eine der verwenden Implementierungen (Amazon S3, usw.), können Sie eine andere binäre Dateispeichersystem versuchen , das funktioniert mit git, wie git-media, git-annex, git-fat, git-bigstore.... I Ich habe mich nicht eingehend mit diesen Optionen befasst und konnte daher keine Empfehlung aussprechen.

Antwort 3 Wenn die Datei nicht mit hochgeladen worden git lfswäre, wäre sie mit gepusht worden gitund Sie hätten eine Binärdatei in Ihrem Git-Repository. Ihre wurde jedoch mit hochgeladen, git lfswie Sie in Frage 4 angegeben haben .

Antwort 4 Andere Benutzer Ihres Repositorys können nach der Installation git lfsauf ihren lokalen Computern einfach eingeben git lfs pull, um die von Ihnen verwendeten Binärdateien einzubringen git lfs.

houtanb
quelle
2
frage1: verwirrend, weil auf dem video die datei während "git push" hochgeladen wird. Auf meiner Seite dauert "git push" einen Bruchteil einer Sekunde. Scheint nichts hochzuladen. "git lfs push origin master" macht anscheinend nichts. Frage 4: "git lfs pull" zeigt "Git LFS: (0 von 2 Dateien) 0 B / 3,85 GB" an, tut aber nichts anderes. Dateien werden nicht heruntergeladen.
Vince
Die Dateien werden also nicht in einem neuen Klon heruntergeladen? Dann stimmt möglicherweise etwas mit Ihrem Setup nicht. Ich weiß nicht, was ich dir über den Push sagen soll, da er für mich wie im Video beschrieben funktioniert.
Houtanb
11
Nicht OP, aber es git lfs pullwar das, wonach ich gesucht habe. :) Vielen Dank! (neu bei git-lfs)
Zack
2
Neu auch bei git-lfs. git lfs pullarbeitete für mich. Aber was ist, wenn ich sie wieder in Zeiger konvertieren möchte? Würde git lfs pushfunktionieren?
Vincent
In Frage 4 ist ab git Version 2.15.0 im regulären git cloneBefehl die LFS-Unterstützung integriert .
Dusklight