Was passiert damit, wenn ich eine Datei oder ein Verzeichnis habe, bei dem es sich um einen symbolischen Link handelt, und die ich in ein Git-Repository übertrage?
Ich würde annehmen, dass es als symbolischer Link verbleibt, bis die Datei gelöscht wird. Wenn Sie die Datei dann von einer alten Version zurückziehen, wird nur eine normale Datei erstellt.
Was macht es, wenn ich die Datei lösche, auf die es verweist? Setzt es nur die baumelnde Verbindung fest?
git
version-control
symlink
Alex
quelle
quelle
.gitignore
sieht den Symlink als eine Datei, nicht als einen Ordner.../..
nach Bedarf verwendet werden.git pull
anstelle von Symlink eine Datei erstellen, versuchen Sie, Ihren Git-Client als Administrator auszuführen.Antworten:
Git speichert nur den Inhalt des Links (dh den Pfad des Dateisystemobjekts, mit dem es verknüpft ist) in einem "Blob", genau wie bei einer normalen Datei. Anschließend werden Name, Modus und Typ (einschließlich der Tatsache, dass es sich um einen Symlink handelt) im Baumobjekt gespeichert, das das enthaltende Verzeichnis darstellt.
Wenn Sie einen Baum auschecken, der den Link enthält, wird das Objekt als Symlink wiederhergestellt, unabhängig davon, ob das Zieldateisystemobjekt vorhanden ist oder nicht.
Wenn Sie die Datei löschen, auf die der Symlink verweist, hat dies keinerlei Auswirkungen auf den Git-gesteuerten Symlink. Sie haben eine baumelnde Referenz. Es ist Sache des Benutzers, den Link entweder zu entfernen oder zu ändern, um bei Bedarf auf etwas Gültiges zu verweisen.
quelle
core.symlinks
Konfigurationsvariable auf false setzen, und Symlinks werden als kleine Nur-Text-Dateien ausgecheckt, die den Link-Text enthalten.symlinks = false
mit ihnen herumspielen .Sie können herausfinden, was Git mit einer Datei macht, indem Sie sehen, was Git macht, wenn Sie sie dem Index hinzufügen. Der Index ist wie ein Pre-Commit. Mit dem festgeschriebenen Index können Sie
git checkout
alles, was sich im Index befand, wieder in das Arbeitsverzeichnis bringen. Was macht Git, wenn Sie dem Index einen symbolischen Link hinzufügen?Um dies herauszufinden, stellen Sie zunächst einen symbolischen Link her:
Git weiß noch nichts über diese Datei.
git ls-files
können Sie Ihren Index (inspizieren-s
drucktstat
-ähnlichen Ausgabe):Fügen Sie nun den Inhalt des symbolischen Links zum Git-Objektspeicher hinzu, indem Sie ihn dem Index hinzufügen. Wenn Sie dem Index eine Datei hinzufügen, speichert Git deren Inhalt im Git-Objektspeicher.
Also, was wurde hinzugefügt?
Der Hash ist ein Verweis auf das gepackte Objekt, das im Git-Objektspeicher erstellt wurde. Sie können dieses Objekt untersuchen, wenn Sie
.git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c
im Stammverzeichnis Ihres Repositorys nachsehen . Dies ist die Datei, die Git im Repository speichert und die Sie später auschecken können. Wenn Sie diese Datei untersuchen, werden Sie feststellen, dass sie sehr klein ist. Der Inhalt der verknüpften Datei wird nicht gespeichert.(Hinweis
120000
ist der in derls-files
Ausgabe aufgeführte Modus. Dies entspricht in etwa100644
einer normalen Datei.)Aber was macht Git mit diesem Objekt, wenn Sie es aus dem Repository in Ihr Dateisystem auschecken? Das hängt von der
core.symlinks
Konfiguration ab. Vonman git-config
:Bei einem symbolischen Link im Repository erhalten Sie beim Auschecken entweder eine Textdatei mit einem Verweis auf einen vollständigen Dateisystempfad oder einen geeigneten symbolischen Link, abhängig vom Wert der
core.symlinks
Konfiguration.In beiden Fällen werden die Daten, auf die der Symlink verweist, nicht im Repository gespeichert.
quelle
Symlinked Verzeichnisse:
Es ist wichtig zu beachten, was passiert, wenn es ein Verzeichnis gibt, bei dem es sich um einen Softlink handelt. Jeder Git-Pull mit einem Update entfernt den Link und macht ihn zu einem normalen Verzeichnis. Das habe ich auf harte Weise gelernt. Einige Einblicke hier und hier.
Beispiel
Vor
git add/commit/push
Nach
git pull
UND einige Updates gefundenquelle