2016-02-11 2 views
8

Wie zu machen msysgit Dateien für echte Änderungen zu scannen?Führen Sie git tiefen Scan, um Dateien für echte zu vergleichen

Derzeit scheint es sich auf Dateizeitstempel zu verlassen und daher macht es Fehler: zeigt keine Unterschiede wo es sind.

Ich versuchte git update-index --refresh und git update-index --really-refresh. Beide Befehle werden sofort beendet und scheinen keinen Scan und keinen Binärvergleich der einzelnen Dateien im Baum durchzuführen.

Ein Zitat aus another question:

Einstellung core.trustctime-false git ignorieren störende Änderungen vornimmt, Ctime die auf einigen Dateisystemen anscheinend passiert. Ich brauche das umgekehrte Verhalten: re-computing the file hash, auch wenn mtime sich nicht geändert hat.

+2

http://stackoverflow.com/questions/9321253/how-to-make-git-check-every-files-contents-event-thoughs-stat-info-may-not-have-c –

+1

@Josh Lee : Ich sollte zugeben, dass die Frage in etwa gleich ist, aber es gibt einige Überlegungen, die meine Frage zurücklassen: 1. Diese Frage hat noch keine Lösung; 2. Ich habe diese Frage nicht anhand von Schlüsselwörtern gefunden. Kann es so formuliert sein, dass niemand es finden kann ?; 3. Diese Frage ist 3 Jahre alt und hat nur 129 Ansichten. – Paul

+0

Während es dort keine Antwort gibt, ist die Frage immer noch ein Duplikat. Als solche gekennzeichnet, wird es durch Schlüsselwörter gefunden. Berücksichtigen Sie Bounty Bump. – Basilevs

Antwort

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 nicht das einzige Werkzeug sein, das dann kaputt geht (Ihr Backup-System und Ihr Build-System werden es höchstwahrscheinlich auch sein).

Sie können versuchen, diese (nach der Warnung unten zu lesen):

rm -f .git/index 
git reset HEAD 

Der rm Befehl wird offensichtlich keine Informationen in dem Index verwerfen, das heißt: alle Stat Informationen, die Git intern zu vermeiden, verwendet, um Dateien zu vergleichen (was Sie erwarten), und alle git add, git reset, Informationen über nicht zusammengeführte Dateien, die Sie in Ihrem Index möglicherweise nicht festgeschrieben haben. Dies wird jedoch keine festgeschriebenen Informationen ändern. Der Befehl git reset HEAD erstellt einen neuen Index, der HEAD entspricht, d. H. Nach diesem Befehl berücksichtigt Git, dass keine Änderungen im Index bereitgestellt werden.

Git wird die Statistik-Informationen wiederherstellen (dh den gesamten Dateivergleich wiederholen) zum Zeitpunkt git reset HEAD, also ist dies eine Lösung, Git zu sagen "forget stat information now", um zu starten, nachdem Sie Ihre Statistik Informationen brechen, aber es ist keine Möglichkeit, Git zu sagen, "benutze nie wieder Stat-Informationen".

+0

Im Moment kann ich mich nicht erinnern, was ich getan habe, um das Ergebnis zu erzielen. Möglicherweise entpacke ich Dateien aus einem Archiv. Aufgrund der Detailgenauigkeit akzeptiere ich deine Antwort. – Paul

2

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

+1

Ja, ich habe darüber nachgedacht, aber es ist nur ein Workaround, nicht die echte Lösung. – Paul

Verwandte Themen