Teil eines sehr großen Repositorys holen / ziehen?

9

Das ist wahrscheinlich offensichtlich und wurde schon oft auf unterschiedliche Weise gefragt, aber ich konnte die Antwort nicht finden, nachdem ich nach etwas Zeit gesucht hatte.

Nehmen Sie Folgendes an:

  • Ich habe, sagen wir, eine 500-GB-Festplatte am lokalen Ende;
  • Ich habe ein 100 Terabyte Remote-Repository; daher sind die Kosten für das Klonen des gesamten Repositories einfach nicht machbar;
  • Das Arbeitsverzeichnis, das zum Erstellen des Remote-Repositorys verwendet wurde, bestand aus 1000 Verzeichnissen der obersten Ebene DIR001, DIR002, ... DIR00N, die jeweils mehrere Unterverzeichnisse mit Dateien nur unter den Blattunterverzeichnissen enthielten (Beispiel: DIR001 / subdir1 / fileA1 ... DIR001 / Subf1 / DateiAN und DIR001 / Unterverzeichnis2 / DateiB1 ... DIR001 / Unterverzeichnis2 / DateiBN, ...
  • Ich habe die Verzeichnisse DIR001, DIR002, ... DIR00N oder irgendetwas anderes in dieser Hinsicht NICHT explizit markiert oder verzweigt
  • Ich initiiere ein brandneues lokales Git-Repository

Wie kann ich effizient die letzten festgeschriebenen Versionen von zB DIR001 / subdir2 / fileB1 ... DIR001 / subdir2 / fileBN aus dem Remote-Repository abrufen oder abrufen und sonst nichts?

AND

nur die letzte festgeschriebene Version einer einzelnen -Datei von DIR001 / subdir2 / fileB1 ... DIR001 / subdir2 / dateiBN aus dem Remote-Repository und sonst nichts?

AND

Wie kann ich eine zuvor festgeschriebene Version einer Teilmenge dieser Dateien und sonst nichts effizient abrufen oder abrufen?

Vielleicht ist fetch / pull nicht der richtige Befehl dafür.

    
Gregg Leichtman 09.09.2010, 11:24
quelle

1 Antwort

5

Die Antwort auf " Partial cloning " kann helfen Du fängst an mit flachen Klonen zu experimentieren.
Aber es wird begrenzt sein:

  • bis zu einer gewissen Tiefe und / oder zu bestimmten Zweigen,
  • aber nicht zu bestimmten Dateien oder Verzeichnissen (Sie können eine Datei oder ein Verzeichnis erhalten, wenn Sie nur sparsam auschecken, aber Sie müssen immer noch zuerst das vollständige Repo erhalten!)
  • Selbst eine gewisse Verpflichtung.
    (Git 2.5 (Q2 2015) unterstützt ein einzelnes Fetch-Commit! Siehe " Ein bestimmtes Commit aus einem Remote-Git-Repository ziehen ") .

Die wirkliche Lösung wäre jedoch, das riesige Remote-Repo in Submodule zu unterteilen.
Siehe Was sind Git-Limits oder Git Stil Backup von Binärdateien zur Veranschaulichung dieser Art von Situation.

Aktualisierung April 2015:

Git Large File Storage (LFS) würde Pull / Fetch viel effizienter machen (von GitHub, April 2015).

Das Projekt ist git-lfs (siehe git-lfs.github.com ) und mit einem Server getestet, der es unterstützt: lfs-test-server :
Sie können Metadaten nur im Git Repo und die große Datei anderswo speichern .

    
VonC 09.09.2010 11:41
quelle

Tags und Links