Cambiare un carattere in un file porta a MSysGit pensando che l’intero file sia cambiato

Ho un repository git contenente codice C # e sto eseguendo MSysGit su Windows.

core.autocrlf è core.autocrlf , e sto usando il .gitattributes da questa domanda , e ho “rinormalizzato” il mio repository come accennato in fondo a questa guida di Github .

Ora per alcuni file .cs nel mio repository, se cambio anche un solo carattere, MSysGit pensa che l’intero file sia cambiato.

Ho clonato il repository fresco. Ho provato a modificare il file prima in Visual Studio, ma poi ho provato ad aprirlo in SciTE che mi mostra i caratteri di fine riga e tab, e inoltre mi fido di non fare nulla di strano nel file (come cambiare la codifica).

Quindi, ho clonato il repository fresco:

 $ git clone git clone [email protected]:my-repo.v2.git $ cd my-repo/ 

Controllo il repository e il file:

 $ git status # On branch master nothing to commit (working directory clean) $ git diff path/to/myfile.cs $ 

Apro il file in SciTE (nota che le terminazioni di riga sono CRLF e non ci sono tabulazioni):

 using System; using System.Collections.Generic; ... 

e cambia un carattere (e nota che CRLF e nessun tab sono ancora veri):

 using System; !using System.Collections.Generic; ... 

e ora git pensa che tutto sia cambiato:

 $ git diff path/to/myfile.cs diff --git a/path/to/myfile.cs b/Dpath/to/myfile.cs --- a/path/to/myfile.cs +++ b/path/to/myfile.cs @@ -1,116 +1,116 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.Practices.EnterpriseLibrary.Data; -using DataModel.Models; -using DataModel.Mappers.Interfaces; -using System.Data.Common; -using System.Data; ... 

Un normale programma diff non crede che i due file siano così diversi, e git diff su Unix non pensa che siano troppo diversi, ma msysgit .

Qualcuno lo ha mai incontrato prima o ha qualche idea?

Alcune cose che possono rendere Git mostrare l’intero file come modificato:

  • Terminazioni di linea – ma hai detto che hai controllato queste e sono le stesse;
  • Indentazione – VS (specialmente se hai alcune estensioni installate) potrebbe cambiare il rientro dalle tabs agli spazi o viceversa. Puoi verificarlo con “Mostra spazio bianco” (Ctrl-R, Ctrl-W in VS o l’opzione pertinente nella tua differenza).
  • Codifica – se VS decide di ricodificare il file con una codifica diversa (ad es. UTF16), potrebbe apparire come completamente modificato, sebbene la rappresentazione testuale sembrerebbe la stessa.