Führen Sie git deep scan durch, um Dateien real zu vergleichen

8

Wie macht man msysgit , um Dateien nach echten Änderungen zu durchsuchen?

Momentan scheint es sich auf Datei-Zeitstempel zu verlassen und deshalb macht es Fehler: Zeigt keine Unterschiede wo es ist.

Ich habe git update-index --refresh und git update-index --really-refresh ausprobiert. Beide Befehle werden sofort beendet und scheinen keinen Scan und binären Vergleich der einzelnen Dateien in der Baumstruktur durchzuführen.

Ein Zitat von eine andere Frage :

  

Wenn core.trustctime auf false gesetzt wird, ignoriert git zufällige Änderungen an ctime, was anscheinend auf einigen Dateisystemen passiert. Ich brauche das umgekehrte Verhalten: den Hash der Datei neu berechnen, auch wenn mtime sich nicht geändert hat.

    
Paul 11.02.2016, 18:38
quelle

2 Antworten

6

Zuerst sollten Sie versuchen, die Wurzel des Problems zu finden. Git's Verwendung von Stat-Informationen (nicht nur Zeitstempel, sondern auch Größe) ist normalerweise sehr zuverlässig. Wenn Sie Probleme damit haben, bedeutet das höchstwahrscheinlich, dass Sie etwas ernsthaft an Ihrem System kaputt gemacht haben. Git wird dann nicht das einzige Werkzeug sein, das zu durchbrechen ist (Ihr Backup-System und Ihr Build-System werden höchstwahrscheinlich auch das sein).

Sie können dies versuchen (nachdem Sie die Warnung unten gelesen haben):

%Vor%

Der Befehl rm verwirft offensichtlich alle Informationen im Index, dh: alle Stat-Informationen, die Git intern verwendet, um zu vermeiden, Dateien zu vergleichen (was Sie erwarten) und git add , git reset , Informationen über nicht eingebundene Dateien Dateien, die Sie in Ihrem Index nicht festgeschrieben haben. Dies wird jedoch keine festgeschriebenen Informationen ändern. Der Befehl git reset HEAD erstellt einen neuen Index, der mit HEAD übereinstimmt, d. H. Nach diesem Befehl berücksichtigt Git, dass keine Änderungen im Index bereitgestellt werden.

Git wird die Statistik-Information wiederherstellen (dh den gesamten Dateivergleich wiederholen) zum Zeitpunkt von git reset HEAD , also ist dies eine Lösung, um Git zu sagen, dass "stat stat information now" jetzt ausgeführt werden soll, nachdem Sie Ihre Stat-Information gebrochen haben Es ist keine Möglichkeit, Git zu sagen, "benutze nie wieder Stat-Informationen".

    
Matthieu Moy 27.06.2016, 06:25
quelle
2

Sie können den Zeitstempel aller Dateien auf die aktuelle Zeit aktualisieren. Sie können dies mit find . -exec touch {} \;

tun     
David Deutsch 11.02.2016 19:43
quelle

Tags und Links