2009-06-25 14 views
73

Quando git esegue un commit, riscrive i file binari con qualcosa di simile a rewrite foobar.bin (76%). Cos'è quello %? È la percentuale modificata o la percentuale trattenuta dal vecchio file. So che git usa un delta binario per i file, ma non so quanta parte di una riscrittura il% rappresenta e non sembra essere nella pagina di aiuto per git help commit.Cosa significa "riscrivi ... (90%)" dopo un commit git?

Grazie!

+0

Potrebbe anche essere correlato a http://stackoverflow.com/questions/244639/git-thinks-i-am-rew-file-of-my-files-everytime-i-make-a-small-change – VonC

+11

Git memorizza in realtà una copia completa di ogni commit per ogni file (come un "blob"). Quando chiedi un diff, Git recupera entrambe le copie del file in questione e fa una diff in quel momento. Il diff attuale non è memorizzato da nessuna parte. Questo in realtà non risponde alla tua domanda ma fa notare che pensare a Git come a memorizzare "delta binari" non è del tutto corretto. –

risposta

48

È una misura dell'indice di somiglianza. L'indice di similarità è la percentuale di linee invariate. git pensa che il tuo file sia testo

+8

Credo che l'indice di similarità non sia correlato al fatto che Git pensi che il file sia testo. Non certo su questo, dato che alcuni file binari possono sembrare molto simili al testo. –

-4

Si sta tentando di riscrivere CR e LF in un formato coerente. Cioè, non vede il tuo file binario come binario. Per forzare git a farlo correttamente inserire la seguente riga nel .gitattributes:

*.bin -crlf -diff -merge 

Da this page che significa:

tutti i file con estensione [.bin] sarà non hanno ritorno a capo/avanzamento riga le traduzioni eseguite, non saranno diffuse e le unioni provocheranno conflitti lasciando intatto il file originale.

+10

Questo non è ciò che "riscrittura" significa nel contesto della domanda. Git sta dicendo "ehi sembra che tu abbia riscritto questo file, ma ha lasciato il 76% di esso come prima". –

19

Credo che Martin sia corretto, che il numero è l'indice di somiglianza. Dalle pagine git-diff man:

L'indice di similarità è la percentuale di linee invariate, e l'indice di dissomiglianza è la percentuale di righe modificate. È un intero arrotondato , seguito da un segno di percentuale. Il valore di indice di somiglianza del 100% è quindi riservato a due file uguali, mentre il 100% dissomiglianza significa che nessuna linea dal vecchio file ne fece quello nuovo.

La prima volta che ho visto il numero ho pensato che i miei binari stessero cambiando drasticamente !.

+0

Quindi, se vedo un rinominare seguito dal 67%, devo interpretare che non solo il file è stato rinominato, ma anche che il 67% del file originale è ancora presente? Concesso ciò potrebbe significare che qualcuno ha modificato il 33% del file originale durante la rinomina. Sarebbe più vantaggioso se il rinominare fosse un singolo commit e poi sia avvenuta la modifica del file? Ciò darebbe un output dell'indice di somiglianza rinominare al 100%? Ciò in teoria implicherebbe che la rinomina abbia avuto successo e nessun dato è stato perso? L'ho visto per la prima volta oggi e voglio assicurarmi di capire che è destinato all'uso. – Eric

Problemi correlati