Tüm makaleler

CRLF'e karşı LF: satır sonu karakterleri neden hâlâ önemli

Türkiye'deki oyun ve mobil uygulama ekiplerinde geliştiriciler genellikle Windows üzerinde Unity veya Visual Studio ile çalışırken, dağıtım sunucuları ve CI/CD hatları çoğunlukla Linux üzerinde çalışır — bu ikilik, satır sonu ayarını göz ardı edilebilecek bir ayrıntı olmaktan çıkarıp gerçek build hatalarının kaynağı hâline getirir.

Ayrışma nereden geliyor

Unix ve macOS tek bir karakter kullanır — LF (line feed, \n). Windows, eski teleks makinelerinden bir karakter çiftini miras almıştır — CRLF (carriage return + line feed, \r\n): biri arabayı satırın başına döndürür, diğeri bir satır aşağı taşır — bir daktilonun tam bir taklidi.

Bu neden hâlâ önemli

  • Git. Diğer dosyaların LF kullandığı bir depoya CRLF içeren bir dosya girerse, git yalnızca bir satır düzenlenmiş olsa bile "tüm dosya değişti" gösterebilir — çünkü teknik olarak tüm satırların sonları değişmiştir.
  • Shebang betikleri. CRLF sonlarıyla kaydedilmiş bir Unix shell betiği, dağıtım sunucusunda çalışmayabilir, çünkü yorumlayıcı ilk satırda fazladan bir \r karakteri görür.
  • Kodda dize karşılaştırma. Görünür metin aynı görünse bile, bir CRLF dosyasından okunan bir satır beklenen bir LF dizesiyle karşılaştırıldığında eşleşmeyebilir.

Bu nasıl ele alınır

Git'te, checkout/commit sırasında satır sonlarını otomatik olarak dönüştüren bir ayar (core.autocrlf) vardır, ancak her katkıcının yerel ayarına güvenmek kırılgan bir çözümdür. Depoya işlenen bir .gitattributes dosyasıyla stili sabitlemek daha güvenilirdir — kural, kimin hangi editörü veya işletim sistemini kullandığından bağımsız olarak herkes için geçerli olur.

Manuel dönüştürme neden gerekli

  • Yanlış satır sonu stiliyle depoya giren bir dosyayı düzeltmek.
  • Linux dağıtım sunucusuna yüklemeden önce Windows düzenleyicisinde düzenlenmiş bir betiği hazırlamak.
  • Görünüşte aynı olan iki dosyanın metin karşılaştırmasının neden bir fark gösterdiğini teşhis etmek.

Aynı dosyada karışık satır sonları

Birden fazla düzenleyicide veya farklı işletim sistemlerinde düzenlenmiş bir dosya, hem CRLF hem de LF içerebilir — bazı satırlar bir stille, bazıları diğeriyle. Bu en zorlu durumdur: dosyayı "LF'ye" dönüştürmek, zaten LF içeren satırlar için ilk bakışta hiçbir şey değiştirmiyor gibi görünür, ama dönüşümü yalnızca görünüşte "şüpheli" satırlara değil, dosyanın tamamına uygulamak önemlidir — aksi hâlde sorun gizli kalır.

Aracı dene