2013-06-01 14 views
52

Sono nuovo di git, e ho letto molto sui finali di linea e su come li tratta. A proposito, sono su Windows. Ho creato il file a .gitattributes e ho impostato ad esempio * .txt in testo. Quando ho commesso un file .txt, ottengo l'avvertimento:git: Come faccio a sbarazzarmi di "avviso: CRLF sarà sostituito da LF" senza disabilitare safecrlf?

avvertimento: CRLF sarà sostituito da LF in whatever.txt

ma so che. Non ho bisogno di questo avvertimento. La sostituzione della linea nei file di testo è ciò che voglio.

Ora, impostando safecrlf false rende l'avviso scomparire, ma il manuale per safecrlf legge:

Se è vero, fa il check git se la conversione CRLF è reversibile quando end-of-line conversione è attiva . Git verificherà se il comando modifica un file nell'albero di lavoro direttamente o o indirettamente. Ad esempio, l'invio di un file seguito da il check-out dello stesso file dovrebbe produrre il file originale nell'albero di lavoro. Se questo non è il caso per l'attuale impostazione di core.autocrlf, git rifiuterà il file.

Da questo, safecrlf sembra una buona idea. Tuttavia, non capisco perché l'impostazione di safecrlf su true mi fornisca avvisi sui miei file di testo; mi sembra che questi sono problemi diversi - l'avviso sui file di testo e il controllo se reversibile. Infatti, git non rifiuta il mio file .

È possibile eliminare gli avvisi per i file di testo e impostare ancora safecrlf? O sto fraintendendo qualcosa?

+1

Perché il file non è stato convertito già in un file di stile di Windows? Sento che questo avviso è buono in quanto git ti sta dicendo che ha modificato il file in qualche modo. La vera soluzione non è avere il file in uno stato in cui git deve modificarlo. Se sei stato clonato da un repository centrale, potresti fare qualcosa di pericoloso per gli altri. – cforbish

+0

cforbish Penso che fosse un file in stile Windows. Ha CRLF al suo interno e si impegna invece con i finali LF. Ma lo sapevo. – oskarkv

+0

oskarkv mi dispiace per l'equivoco. Ti capita di usare vim/gvim? In tal caso, puoi rendere il file un file di stile Linux con ': set ff = unix', per evitare l'avvertimento. Questo effettivamente modifica il file in modo da dover ': w'. – cforbish

risposta

9

Nella tua .gitattributes è possibile:

# normalize text files to use lf 
text eol=lf 

# except these which we want crlf 
*.txt eol=crlf 
+0

Puoi anche fare cose divertenti con le differenze, ad es. '* .cs eol = crlf diff = csharp' –

+0

O unione:' * .csproj merge = union' –

+2

Questo non risponde alla mia domanda. – oskarkv

13

Per quanto posso dire, l'impostazione core.safecrlf-false è l'unico modo per disattivare questo avvertimento.

safecrlf in genere non è necessario se gli attributi sono impostati correttamente. Il punto di safecrlf è impedire la normalizzazione in un file che è supposto di hanno terminazioni di riga miste (o non LF) nel repository. È davvero utile solo in combinazione con core.autocrlf (per assicurarti che le sue ipotesi automatiche non possano distruggere nulla), e se stai impostando i tuoi attributi tramite .gitattributes, dovrebbe essere ok per disattivarli.

4

La risposta breve alla tua domanda è NO.

Perché, fondamentalmente, core.safecrlf controlli di impostazione "livello di guardia":

  • false - di procedere senza preavviso
  • avvisate - procedere con avvertimento
  • vero - non procedere

Quindi, dovete scegliere un'opzione che ti si addice di più.

Problemi correlati