Git Hardlinks - Weiß es, dass eine Datei ein Hardlink ist?

16

Ich habe angefangen, feste Links anstelle von symbolischen Links zu verwenden, um Dateien zu organisieren ...

Ich mache dies für Bilder, die ich mache, um sie zu kategorisieren und um anzugeben, welche ich drucken möchte usw.

Ich verwende git, um meine Bilder zu sichern, und es scheint, dass git dachte, es handele sich um neue Dateien, als das Repository um 1 GB an Größe zunahm. Git erkennt Umbenennungen sehr gut, wenn ich die Datei nicht mit git umbenenne, aber werden auch harte Links verarbeitet?

Walter

Walter
quelle
2
Alle normalen Dateien sind Hardlinks. Vielleicht meintest du "Dateien mit mehreren festen Links"?
Ignacio Vazquez-Abrams
Ja, das habe ich gemeint.
Walter
1
Korrigiere mich, wenn ich falsch liege, aber nicht mehr git content? Warum ist es wichtig, wenn die Dateien den gleichen Inhalt haben? Schließlich handelt es sich technisch um die gleiche Datei.
new123456
1
Für Leute, die darüber stolpern - ziehen Sie vielleicht in Betracht, stattdessen symbolische Links zu verwenden? stackoverflow.com/q/954560/492
CAD-Kerl
Es hört sich so an, als ob Sie ein tagbasiertes Dateisystem möchten.
Nayuki

Antworten:

14

Multipliziert verknüpfte nachverfolgte Dateien lassen den Objektspeicher von Git nicht stark anwachsen, da jede Verknüpfung durch genau dasselbe Blob-Objekt dargestellt wird. Ihr Arbeitsbaum kann jedoch aufgrund unterbrochener Verknüpfungen wachsen.

Git verfolgt nicht, ob verfolgte, funktionierende Baumdateien feste Links zu derselben Datei sind.

Git lässt mehrfach verknüpfte, nachverfolgte, funktionierende Baumdateien in Ruhe, wenn Sie nicht aufgefordert werden, den Inhalt dieser Pfadnamen zu ändern oder die Verzeichniseinträge der Pfadnamen zu löschen. Wenn Sie jedoch (z. B.) ein altes Commit oder einen alten Zweig auschecken und dann zu Ihrem normalen, neuesten Zweig / Commit zurückkehren, wird Git am Ende die harten Links „brechen“ (und die betroffenen Pfadnamen durch neue (aber identische ersetzen) ) Dateien, anstatt Ihre mehrfach verknüpfte Situation neu zu erstellen).

Um Ihren mehrfach verknüpften Status wiederherzustellen, können Sie ein Programm schreiben, um nach identischen Dateien zu suchen und sie erneut mit einer der Dateien zu verknüpfen. Eine solche "Neuverknüpfung" kann komplizierter sein, wenn sich alle Verknüpfungen nicht im Arbeitsbaum selbst oder zumindest nicht an einem leicht identifizierbaren "externen" Ort befinden (dh es wird wahrscheinlich schwierig sein, die Verknüpfungen wiederherzustellen, wenn Sie eine Verknüpfung herstellen "Zufällige" Dateien aus Ihrem gesamten Home-Verzeichnis in ein "Backup" -Repository und mit Git zum Ändern des Arbeitsbaums).

Die Idee ist auf der Git-Mailingliste aufgetaucht:

Chris Johnsen
quelle
Für debian-basierte Linuxe gibt es das Hardlink-Tool ( packages.debian.org/search?keywords=hardlink ), das diesen Relink-Vorgang ausführen kann. Leider ist es nicht sehr schnell
Daniel Alder
Ich laufe hardlinkals Nachtjob weiter /var/lib/jenkins.
Amedee Van Gasse