Tutti gli articoli

CRLF contro LF: perché i caratteri di fine riga contano ancora

In molti team italiani che sviluppano su Windows ma distribuiscono su server Linux — spesso in hosting condiviso o su VPS economici — la differenza tra CRLF e LF non è un dettaglio da manuale, ma la causa concreta di script che funzionano in locale e falliscono in produzione con un errore poco chiaro.

Da dove viene la divergenza

Unix e macOS usano un unico carattere — LF (line feed, \n). Windows ha ereditato dalle vecchie telescriventi una coppia di caratteri — CRLF (carriage return + line feed, \r\n): uno riporta il carrello all'inizio della riga, l'altro sposta alla riga sotto — un'imitazione letterale di una macchina da scrivere.

Perché conta ancora

  • Git. Se un file con CRLF finisce in un repository dove gli altri file usano LF, git può mostrare "l'intero file è cambiato" anche se è stata modificata una sola riga — perché tecnicamente sono cambiate le terminazioni di tutte le righe.
  • Script con shebang. Uno script shell Unix salvato con terminazioni CRLF può non avviarsi sul server, perché l'interprete vede un carattere \r in più nella prima riga.
  • Confronto di stringhe nel codice. Una riga letta da un file CRLF può non corrispondere in un confronto con una stringa LF attesa, anche se il testo visibile sembra uguale.

Come si risolve

Git ha un'impostazione (core.autocrlf) che converte automaticamente le terminazioni di riga al checkout/commit, ma affidarsi alla configurazione locale di ogni collaboratore è fragile. È più affidabile fissare lo stile in un file .gitattributes versionato nel repository, così la regola vale per tutti, indipendentemente dall'editor o dal sistema operativo usato.

A cosa serve la conversione manuale

  • Correggere un file finito nel repository con lo stile di fine riga sbagliato.
  • Preparare uno script per un server Linux che è stato modificato in un editor Windows.
  • Diagnosticare perché un confronto testuale tra due file apparentemente identici mostra una differenza.

Fine riga misti nello stesso file

Un file modificato in più editor o su sistemi operativi diversi può contenere sia CRLF sia LF contemporaneamente — parte delle righe con uno stile, parte con l'altro. È il caso più insidioso: la conversione "in LF" a prima vista non cambia nulla per le righe che avevano già LF, ma è importante applicare la trasformazione all'intero file, non solo alle righe visibilmente "sospette", altrimenti il problema resta nascosto.

Prova lo strumento