Saya telah membaca banyak pertanyaan dan jawaban yang berbeda tentang Stack Overflow juga dokumentasi git tentang bagaimana pengaturan core.autocrlf bekerja.
Ini adalah pemahaman saya dari apa yang saya baca:
Klien Unix dan Mac OSX (pra-OSX menggunakan CR) menggunakan ujung garis LF.
Klien Windows menggunakan ujung garis CRLF.
Ketika core.autocrlf disetel ke true pada klien, repositori git selalu menyimpan file dalam format akhiran LF dan akhiran baris dalam file pada klien dikonversi bolak-balik saat check out / commit untuk klien (yaitu Windows) yang menggunakan non -LF akhir baris, tidak peduli apa format file akhir baris pada klien (ini tidak setuju dengan definisi Tim Clem - lihat pembaruan di bawah).
Berikut ini adalah matriks yang mencoba mendokumentasikan hal yang sama untuk pengaturan 'input' dan 'false' dari core.autocrlf dengan tanda tanya di mana saya tidak yakin dengan perilaku konversi akhir baris.
Pertanyaan saya adalah:
- Apa yang seharusnya menjadi tanda tanya?
- Apakah matriks ini benar untuk "tanda non-pertanyaan"?
Saya akan memperbarui tanda tanya dari jawaban saat konsensus tampaknya terbentuk.
nilai core.autocrlf input benar salah -------------------------------------------------- -------- berkomitmen | pindah agama? ? baru | ke LF (dikonversi ke LF?) (tidak ada konversi?) berkomitmen | ubah ke ? tidak ada | Konversi LF (convert to LF?) checkout | ubah ke ? tidak ada | Konversi CRLF (tidak ada konversi?)
Saya tidak benar-benar mencari pendapat tentang pro dan kontra dari berbagai pengaturan. Saya hanya mencari data yang menjelaskan bagaimana mengharapkan git beroperasi dengan masing-masing dari tiga pengaturan.
-
Pembaruan 04/17/2012 : Setelah membaca artikel oleh Tim Clem yang ditautkan oleh JJD dalam komentar, saya telah memodifikasi beberapa nilai dalam nilai "tidak dikenal" pada tabel di atas, serta mengubah "checkout yang ada | true to convert ke CRLF bukannya dikonversi ke klien ". Berikut adalah definisi yang dia berikan, yang lebih jelas daripada apa pun yang saya lihat di tempat lain:
core.autocrlf = false
Ini adalah standarnya, tetapi kebanyakan orang dianjurkan untuk segera mengubahnya. Hasil dari menggunakan false adalah bahwa Git tidak pernah mengacaukan akhiran baris pada file Anda. Anda dapat memeriksa file dengan LF atau CRLF atau CR atau campuran acak dari ketiga dan Git tidak peduli. Ini dapat membuat perbedaan lebih sulit untuk dibaca dan penggabungan menjadi lebih sulit. Kebanyakan orang yang bekerja di dunia Unix / Linux menggunakan nilai ini karena mereka tidak memiliki masalah CRLF dan mereka tidak perlu Git untuk melakukan pekerjaan tambahan setiap kali file ditulis ke database objek atau ditulis ke dalam direktori kerja.
core.autocrlf = benar
Ini berarti bahwa Git akan memproses semua file teks dan memastikan bahwa CRLF diganti dengan LF saat menulis file itu ke database objek dan mengubah semua LF kembali menjadi CRLF ketika menulis ke direktori kerja. Ini adalah pengaturan yang disarankan pada Windows karena memastikan bahwa repositori Anda dapat digunakan pada platform lain sambil mempertahankan CRLF di direktori kerja Anda.
core.autocrlf = input
Ini berarti bahwa Git akan memproses semua file teks dan memastikan bahwa CRLF diganti dengan LF saat menulis file itu ke database objek. Namun, itu tidak akan melakukan yang sebaliknya. Ketika Anda membaca file kembali dari objek database dan menuliskannya ke direktori kerja, mereka masih memiliki LF untuk menunjukkan akhir baris. Pengaturan ini umumnya digunakan pada Unix / Linux / OS X untuk mencegah CRLF dari ditulis ke dalam repositori. Gagasannya adalah jika Anda menempelkan kode dari browser web dan secara tidak sengaja memasukkan CRLF ke salah satu file Anda, Git akan memastikan bahwa kode itu diganti dengan LF ketika Anda menulis ke database objek.
Artikel Tim sangat bagus, satu-satunya hal yang dapat saya pikirkan yang hilang adalah ia menganggap repositori dalam format LF, yang tidak selalu benar, terutama untuk proyek-proyek Windows saja.
Membandingkan artikel Tim dengan jawaban tertinggi sampai saat ini oleh jmlane menunjukkan persetujuan sempurna pada pengaturan input dan benar serta ketidaksepakatan pada pengaturan palsu.
autocrlf
kesalahan tampaknya jauh lebih mudah;) stackoverflow.com/questions/2333424/...