Perché sed fa in modo che Git consideri l'intero file riscritto?


2

Usando Cygwin su Win7x32, quando uso sedper sostituire alcuni valori in un file, gitquindi considero l'intero file completamente riscritto (ovvero 500 inserimenti, 500 eliminazioni). Cosa sta succedendo qui? Solo una riga nel file viene effettivamente modificata e il valore di sostituzione ha la stessa lunghezza dell'originale. Mi aspetto gitdi riconoscere solo le linee che sono cambiate. L'unica cosa che sembra essere cambiata è l'inode e i valori del tempo letti stat some/file.txt. C'è un modo per dire gitdi ignorare i valori modificati rilevanti per la durata delle mie sedchiamate o seddi non modificare i valori che causano la gitvisualizzazione di un file con contenuto completamente nuovo?

Risposte:


4

Non lavoro molto con Windows, ma forse sedsta cambiando i tuoi marker di fine linea. Il filecomando ti dirà quale codifica di testo viene utilizzata. Inoltre, è possibile eseguire cat -eprima e dopo la chiamata sed; se il file è codificato per Windows, ogni riga terminerà con ^M.


Questo sembra il colpevole; prima, il file è ASCII C++ program text, with CRLF line terminators, e dopo ASCII C++ program text,. Avevo l'impressione che sednon facesse alcun tipo di conversioni automagiche del genere, essendo un "stream editor", ma vabbè.
mer

Cygwin ha lo unix2dosstrumento? Ciò riporterà l'indicatore di fine riga di Windows.
eduffy

Sì, è quello che ho finito per usare. Solo un po 'sorpreso dopo aver sentito tante cose positive sed.
wes

L'uso di unix2dos mi ha aiutato, tuttavia, in qualche modo, ora ho solo sostituito la linea che termina in ^ M, il resto è ancora LF.
VsMaX,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.