2015-09-03 15 views
7

Sto lavorando in un ambiente di lavoro solo per Windows con gli sviluppatori che utilizzano tutti i tipi di strumenti per modificare i loro file. Stiamo usando .git insieme allo stack atlassiano per la versione del nostro codice. Mi piace quasi tutto.Come modificare il comportamento dello stato git mostrando i file modificati che alla fine non vengono commessi?

Ho appena finito di combattere una lunga e dura battaglia per capire come e perché Git interpreta le terminazioni di linea e cosa fa core.autocrlf. Abbiamo deciso di utilizzare core.autocrlf true e tutto è quasi perfetto.

Mi piacerebbe sapere come modificare questo comportamento di git status:

  • Ho un file con CRLF fine riga.
  • cambio la fine riga per LF

    $ git status 
    On branch somebranch 
    Changes not staged for commit: 
        (use "git add <file>..." to update what will be committed) 
        (use "git checkout -- <file>..." to discard changes in working directory) 
    
    modified: Src/the_file_i_changed_to_LF.js 
    
  • Ma poi ...

    $ git commit -a 
    warning: LF will be replaced by CRLF in Src/the_file_i_changed_to_LF.js. 
    The file will have its original line endings in your working directory. 
    On branch somebranch 
    nothing to commit, working directory clean 
    

a questo:

  • ho un file con CRLF fine linea.
  • posso cambiare le terminazioni di linea per LF

    $ git status 
    On branch somebranch 
    nothing to commit, working directory clean 
    
  • che ha senso dal momento che nulla sarà ottenere impegnati in ogni caso.

È possibile?

Credo che il possibile duplicato non contenga la risposta che sto cercando. Vorrei sottolineare che faccio (penso di) sapere cosa fa la mia impostazione core.autocrlf true e voglio mantenerla in questo modo. Quello che mi interessa è non rilevare i cambiamenti in git status che non saranno comunque commessi, o capire perché questo non è possibile.

risposta

1

Quando si imposta core.autocrlf true, tutti i file nella directory di lavoro avranno il termine di riga CRLF (meno la fine della riga effettiva nel repository). Per la maggior parte degli utenti Windows questo è abbastanza buono.

Dalla tua domanda capisco che vuoi avere i tuoi file di directory di lavoro (= file locale) con LF. Quindi, qui dovresti usare core.autocrlf input. Questo ti darà la fine esatta della linea come nel repository (ma sarà comunque sicuro che tutti i check-in vengano effettuati con LF).

Ulteriori informazioni sulla differenza di vero, falso, input in questo answer.