2009-06-25 7 views
73

Wenn git ein Commit durchführt, schreibt es Binärdateien mit etwas ähnlich wie rewrite foobar.bin (76%). Was ist das %? Wird der Prozentsatz geändert oder der Prozentsatz aus der älteren Datei beibehalten? Ich weiß, dass git ein binäres Delta für Dateien verwendet, aber ich weiß nur nicht, wie viel von einer Neuschreibung der% darstellt und es scheint nicht auf der Hilfeseite für git help commit zu sein.Was bedeutet die Nachricht "Neuschreiben ... (90%)" nach einem Git Commit?

Danke!

+0

Könnte auch mit http://stackoverflow.com/questions/244639/git-thinks-iam-rewriting-one-of-my-files-everything-i-make-a-small-change – VonC

+11

verwandt werden Git speichert tatsächlich eine vollständige Kopie jedes Commits für jede Datei (als "Blob"). Wenn Sie nach einem Unterschied fragen, ruft Git beide Kopien der fraglichen Datei ab und führt in diesem Moment einen Vergleich durch. Das tatsächliche Diff wird nirgendwo gespeichert. Dies beantwortet deine Frage nicht wirklich, weist aber darauf hin, dass das Denken an Git als "binäre Deltas" speichern nicht ganz korrekt ist. –

Antwort

48

Es ist ein Maß für den Ähnlichkeitsindex. Der Ähnlichkeitsindex ist der Prozentsatz unveränderter Zeilen. git denkt, dass deine Datei Text ist.

+8

Ich glaube, dass der Ähnlichkeitsindex nichts damit zu tun hat, ob Git denkt, dass die Datei Text ist. Da bin ich mir nicht sicher, da manche Binärdateien sehr nach Text aussehen können. –

-4

Es versucht CRs und LFs in ein konsistentes Format umzuschreiben. Das heißt, Ihre Binärdatei wird nicht als Binärdatei angezeigt. Um zu erzwingen, git dies richtig zu tun setzen Sie die folgende Zeile in .gitattributes:

*.bin -crlf -diff -merge 

Von this page das heißt:

alle Dateien mit einer [.bin] Erweiterung wird nicht Carriage Return/Zeilenvorschub hat Übersetzungen gemacht, wird nicht diffediert und Zusammenführungen führen zu Konflikten verlassen die ursprüngliche Datei unberührt.

+10

Dies ist nicht was "Umschreiben" im Zusammenhang mit der Frage bedeutet. Git sagt: "Hey, es sieht so aus, als hättest du diese Datei umgeschrieben, aber 76% davon wie vorher gemacht". –

19

Ich glaube Martin ist richtig, diese Zahl ist der Ähnlichkeitsindex. Von den git-diff Manpages:

Der Ähnlichkeitsindex ist der Prozentsatz unveränderter Linien und der Unähnlichkeitsindexes ist der Prozentsatz von geänderten Zeilen. Es ist eine abgerundete Ganzzahl, gefolgt von einem Prozentzeichen. Der Ähnlichkeitsindexwert von 100% somit für zwei gleiche Dateien reserviert, während 100% Unähnlichkeit bedeutet, dass keine Linie aus der alten Datei, um sie in die neuen gemacht.

Das erste Mal, als ich die Nummer sah, dachte ich, dass sich meine Binärdateien dramatisch änderten!

+0

Also wenn ich eine Umbenennung gefolgt von 67% sehe dann soll ich das interpretieren wie die Datei nicht nur umbenannt wurde sondern auch dass noch 67% der Originaldatei vorhanden ist? Zugegeben, das könnte bedeuten, dass jemand beim Umbenennen 33% der Originaldatei bearbeitet hat. Wäre es günstiger, wenn das Umbenennen ein einzelner Commit wäre und dann die Bearbeitung der Datei passiert wäre? Würde das eine Ausgabe des Umbenennungsähnlichkeitsindex zu 100% ergeben? Das würde theoretisch bedeuten, dass das Umbenennen erfolgreich war und keine Daten verloren gingen? Ich habe das heute zum ersten Mal gesehen und möchte sicherstellen, dass ich verstehe, dass es beabsichtigt ist. – Eric

Verwandte Themen