Die Indexdatei ändern, nur zufällig nicht sollte. Das ist der Zwischenspeicher, ein Puffer zwischen dem Repository von Commits und dem Arbeitsbaum. Für die Effizienz speichert es auch einige Metadaten über den funktionierenden Baum (die ausgecheckten Dateien, die Sie ändern können), die schnellere status
oder diff
Ergebnisse ermöglichen würden. Um zu sehen, welche Art von Informationen gespeichert sind, versuchen Sie git ls-files --debug
auszuführen. Dies sollte drucken, für jede Datei und Verzeichnis, so etwas wie:
path/to/file
ctime: 1332898839:873326227
mtime: 1332898839:873326227
dev: 2052 ino: 4356685
uid: 1000 gid: 100
size: 3065 flags: 6c
Also, wenn eine Datei ändert in keiner Weise auf der Platte, nicht als Inhalt, sondern interne Sachen wie dem Inode es verwendet wird, wird es auslösen ein Update auf die Datei index
, wenn der Index das nächste Mal verwendet wird.
git branch
den Index nicht aktualisiert werden, da es die .git/HEAD
-Datei und die .git/refs/heads
und .git/packed-refs
Dateien überprüft nur, es geht um den Index oder der Arbeits Baum kümmert sich nicht darum. git diff
und git status
, auf der anderen Seite, arbeiten Sie mit dem Index.
Ich habe ein Experiment gemacht: Ich kopierte die aktuelle Datei index
, ich erstellte eine neue Version einer Datei, die sicherstellt, dass ihr ein neuer Inode zugewiesen wird (kopiere, entferne Original, benenne die Kopie zurück auf den ursprünglichen Namen) , führte git status
aus und verglichen dann die neue Indexdatei mit der ursprünglichen Kopie. Zwei Dinge änderten sich: eine Zeile, die die betroffene Datei enthielt, und die Änderungen waren in den Bytes direkt vor dem Dateinamen und ein paar Bytes direkt am Ende der Indexdatei, wahrscheinlich ein Zeitstempel für die letzte Indexberechnung. Die Gesamtgröße der Datei blieb gleich.
Zurück zu Ihrem Problem, wenn Sie keinen Befehl ausführen, der den Index selbst berührt, dann haben Sie vielleicht ein anderes Werkzeug, das das für Sie tut: ein IDE-Plugin oder eine Datei-Browser-Erweiterung, die Git-Repositories kennt welches den Status von Git-Repositories überprüft. Oder es gibt einen anderen Prozess, der die Art ändert, in der Dateien auf der Festplatte gespeichert werden, z. B. ein Disk-Defrag-Dienstprogramm.
Der Index mit Stat-Informationen jedes Mal, wenn eine Datei im Arbeitsverzeichnis von git inspiziert aktualisiert wird. Es macht nachfolgende Operationen schneller, da Git den Inhalt einer Datei in vielen Fällen überspringen kann, wenn es seit der letzten Git-Operation nicht aktualisiert wurde. Können Sie Ihr .git-Verzeichnis nicht von der Dateisynchronisierung ausschließen? –
Warum verwenden Sie "Unisono", um Ihr Git Repo zu synchronisieren? Das ist irgendwie komisch. Verwenden Sie einfach 'git' direkt. –
@KevinBallard Ich verwende Unison, um ein Home-Verzeichnis zu synchronisieren, das Hunderttausende von Dateien und viele Gigabytes sowie einige Dutzend Git-Repos enthält. Die meisten dieser Git Repos haben keine anderen Repliken. –