Cara konversi akhir baris bekerja dengan git core.autocrlf antara sistem operasi yang berbeda

220

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:

  1. Apa yang seharusnya menjadi tanda tanya?
  2. 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.

Michael Maddox
sumber
7
Menjaga autocrlfkesalahan tampaknya jauh lebih mudah;) stackoverflow.com/questions/2333424/...
VonC
@VonC: Saya sudah membaca itu dan saya pikir saya memahaminya, tetapi saya tidak harus membuat pilihan. Saya bekerja dengan repositori git yang tidak saya kendalikan yang mengharuskan saya menetapkan nilai dengan cara tertentu.
Michael Maddox
5
Bukankah lebih baik jika Windows dinormalisasi ke LF juga? Mac dulu CR (sebelumnya v10) tetapi sekarang dinormalisasi ke LF.
Brett Ryan
3
Saya perlu menambahkan tautan ke artikel hebat Timothy Clem - mohon baca semua Mind the End of Your Line .
JJD
1
Skenario: Saya adalah pengembang Linux / Windows yang terpisah. Saya hanya menggunakan editor teks yang dapat mengenali kedua jenis ujung garis (IE. Vim, eclipse). Saya hanya perlu (ingin) bekerja dengan file yang diakhiri dengan LF. Saat ini saya memiliki core.autocrlf = input yang diset di global git config saya. Apakah saya baik untuk pergi? Akankah saya memiliki konflik?
Chris

Jawaban:

128

Penjelasan terbaik tentang cara core.autocrlfkerja ditemukan di halaman manual gitattributes , di bagian textatribut.

Beginilah core.autocrlftampaknya berfungsi saat ini (atau setidaknya sejak v1.7.2 dari apa yang saya ketahui):

  • core.autocrlf = true
    1. File teks diperiksa dari repositori yang hanya memiliki LFkarakter dinormalisasi ke CRLFdalam pohon kerja Anda; file yang berisi CRLFdalam repositori tidak akan disentuh
    2. File teks yang hanya memiliki LFkarakter dalam repositori, yang dinormalisasi dari CRLFke LFketika berkomitmen kembali ke repositori. File yang berisi CRLFdalam repositori akan dikomit tak tersentuh.
  • core.autocrlf = input
    1. File teks yang check-out dari repositori akan menyimpan karakter EOL asli di pohon kerja Anda.
    2. File teks di pohon kerja Anda dengan CRLFkarakter dinormalisasi ke LFsaat berkomitmen kembali ke repositori.
  • core.autocrlf = false
    1. core.eol menentukan karakter EOL dalam file teks pohon kerja Anda.
    2. core.eol = nativesecara default, yang berarti Windows EOLs CRLFdan * nix EOLs berada LFdi pohon yang berfungsi.
    3. gitattributesPengaturan repositori menentukan normalisasi karakter EOL untuk komit ke repositori (standarnya adalah normalisasi LFkarakter).

Saya baru saja meneliti masalah ini dan saya juga menemukan situasinya sangat berbelit-belit. The core.eolpengaturan pasti membantu menjelaskan bagaimana karakter EOL ditangani oleh git.

jmlane
sumber
3
untuk autocrlf = benar tidak harus menjadi yang berikut? File teks yang hanya memiliki karakter ERL CRLF di repositori, dinormalisasi dari CRLF ke LF ketika dikomit kembali ke repositori. File yang mengandung LF di repositori akan dikomit tak tersentuh.
Piotr Lewandowski
2
Bagi saya, bahkan jika autocrlf = false git mengubah EOL menjadi CRLF. Setelah membaca jawaban ini saya menyadari bahwa file .gitattribute saya memiliki text = auto set yang menyebabkan masalah.
irsis
1
Sebab core.autocrlf = false, jika saya tidak memiliki gitattributesfile apakah itu berarti tidak akan ada normalisasi? Atau apakah itu berarti akan menggunakan normalisasi default?
Dagu
Bukankah seharusnya .gitattributesfile lebih diutamakan daripada core.autocrlfpengaturan?
Qwerty
63

Masalah EOL dalam proyek platform campuran telah membuat hidup saya sengsara untuk waktu yang lama. Masalah biasanya muncul ketika sudah ada file dengan EOL berbeda dan campuran sudah di repo. Ini berarti:

  1. Repo mungkin memiliki file yang berbeda dengan EOL yang berbeda
  2. Beberapa file dalam repo mungkin memiliki EOL campuran, misalnya kombinasi CRLFdan LFdalam file yang sama.

Bagaimana ini terjadi bukanlah masalah di sini, tetapi itu memang terjadi.

Saya menjalankan beberapa tes konversi pada Windows untuk berbagai mode dan kombinasinya.
Inilah yang saya dapatkan, dalam tabel yang sedikit dimodifikasi:

                 | Menghasilkan konversi saat | Menghasilkan konversi saat
                 | melakukan file dengan berbagai | memeriksa DARI repo -
                 | EOL KE repo dan | dengan file campuran di dalamnya dan
                 | nilai core.autocrlf: | nilai core.autocrlf:           
-------------------------------------------------- ------------------------------
File | benar | masukan | false | benar | masukan | Salah
-------------------------------------------------- ------------------------------
Windows-CRLF | CRLF -> LF | CRLF -> LF | apa adanya | apa adanya | apa adanya | dengan adanya
Unix -LF | apa adanya | apa adanya | apa adanya | LF -> CRLF | apa adanya | dengan adanya
Mac -CR | apa adanya | apa adanya | apa adanya | apa adanya | apa adanya | dengan adanya
Mixed-CRLF + LF | apa adanya | apa adanya | apa adanya | apa adanya | apa adanya | dengan adanya
Mixed-CRLF + LF + CR | apa adanya | apa adanya | apa adanya | apa adanya | apa adanya | dengan adanya

Seperti yang Anda lihat, ada 2 kasus ketika konversi terjadi pada komit (3 kolom kiri). Dalam kasus-kasus lainnya, file-file tersebut dibuat apa adanya.

Saat checkout (3 kolom kanan), hanya ada 1 kasus di mana konversi terjadi ketika:

  1. core.autocrlfadalah true dan
  2. file dalam repo memiliki LFEOL.

Paling mengejutkan bagi saya, dan saya menduga, penyebab banyak masalah EOL adalah bahwa tidak ada konfigurasi di mana EOL campuran seperti CRLF+ LFmendapatkan dinormalisasi.

Perhatikan juga bahwa EOL Mac "lama" CRhanya juga tidak pernah dapat dikonversi.
Ini berarti bahwa jika skrip konversi EOL yang ditulis dengan buruk mencoba untuk mengkonversi file akhir campuran dengan CRLFs + LFs, dengan hanya mengubah LFs ke CRLFs, maka itu akan meninggalkan file dalam mode campuran dengan "kesepian" CRdi mana a CRLFdikonversi menjadi CRCRLF.
Git kemudian tidak akan mengkonversi apa pun, bahkan dalam truemode, dan kekacauan EOL berlanjut. Ini benar-benar terjadi pada saya dan mengacaukan file saya dengan sangat buruk, karena beberapa editor dan kompiler (misalnya VS2010) tidak suka Mac EOLs.

Saya kira satu-satunya cara untuk benar-benar menangani masalah ini adalah dengan menormalkan seluruh repo secara berkala dengan memeriksa semua file dalam inputatau falsemode, menjalankan normalisasi yang tepat dan melakukan kembali file yang diubah (jika ada). Di Windows, mungkin melanjutkan bekerja dengan core.autocrlf true.

Adi Shavit
sumber
4
Jawaban luar biasa, tetapi satu kalimat yang tidak dapat saya setujui adalah Di Windows, mungkin melanjutkan bekerja dengancore.autocrlf true . Saya pribadi percaya itu inputharus selalu digunakan.
G. Demecki
39

Hal-hal akan berubah di bagian depan "konversi konversi", dengan Git 1.7.2 yang akan datang :

Pengaturan konfigurasi baru core.eolsedang ditambahkan / dikembangkan :

Ini adalah pengganti core.eolkomit variabel 'Tambah " " yang saat ini ada pu(yang terakhir dalam seri saya).
Alih-alih menyiratkan bahwa " core.autocrlf=true" adalah pengganti untuk " * text=auto", itu membuat eksplisit fakta bahwa autocrlfhanya untuk pengguna yang ingin bekerja dengan CRLF di direktori kerja mereka di repositori yang tidak memiliki normalisasi file teks .
Saat diaktifkan, "core.eol" diabaikan.

Memperkenalkan variabel konfigurasi baru, " core.eol", yang memungkinkan pengguna untuk mengatur akhir baris mana yang akan digunakan untuk file yang dinormalisasi akhir-line di direktori kerja.
Standarnya adalah " native", yang berarti CRLF di Windows dan LF di tempat lain. Perhatikan bahwa " core.autocrlf" menimpa core.eol.
Ini berarti:

[core]
  autocrlf = true

menempatkan CRLF di direktori kerja bahkan jika core.eoldiatur ke " lf".

core.eol:

Setel tipe akhir baris untuk digunakan dalam direktori kerja untuk file yang memiliki textproperti set.
Alternatifnya adalah 'lf', 'crlf' dan 'asli', yang menggunakan akhiran asli platform.
Nilai standarnya adalah native.


Evolusi lain sedang dipertimbangkan :

Untuk 1.8, saya akan mempertimbangkan untuk core.autocrlfhanya mengaktifkan normalisasi dan meninggalkan keputusan akhir direktori kerja ke core.eol, tetapi itu akan merusak pengaturan orang.


git 2.8 (Maret 2016) meningkatkan cara core.autocrlfmempengaruhi eol:

Lihat komit 817a0c7 (23 Feb 2016), melakukan 6e336a5 , komit df747b8 , komit df747b8 (10 Feb 2016), melakukan df747b8 , komit df747b8 (10 Feb 2016), dan komit 4b4024f , komit bb211b4 , komit 92cce13 , komit 320d39c , komit 4b4024f , komit bb211b4 , komit 92cce13 , komit 320d39c (05 Feb 2016) oleh Torsten Bögershausen ( tboegi) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit c6b94eb, 26 Feb 2016)

convert.c: refactor crlf_action

Refactor penentuan dan penggunaan crlf_action.
Hari ini, ketika tidak ada crlfatribut yang diset pada file, crlf_actiondiset ke CRLF_GUESS. Gunakan CRLF_UNDEFINEDsebaliknya, dan cari " text" atau " eol" seperti sebelumnya.

Ganti CRLF_GUESSpenggunaan lama :

CRLF_GUESS && core.autocrlf=true -> CRLF_AUTO_CRLF
CRLF_GUESS && core.autocrlf=false -> CRLF_BINARY
CRLF_GUESS && core.autocrlf=input -> CRLF_AUTO_INPUT

Buat lebih jelas, apa itu apa, dengan mendefinisikan:

- CRLF_UNDEFINED : No attributes set. Temparally used, until core.autocrlf
                   and core.eol is evaluated and one of CRLF_BINARY,
                   CRLF_AUTO_INPUT or CRLF_AUTO_CRLF is selected
- CRLF_BINARY    : No processing of line endings.
- CRLF_TEXT      : attribute "text" is set, line endings are processed.
- CRLF_TEXT_INPUT: attribute "input" or "eol=lf" is set. This implies text.
- CRLF_TEXT_CRLF : attribute "eol=crlf" is set. This implies text.
- CRLF_AUTO      : attribute "auto" is set.
- CRLF_AUTO_INPUT: core.autocrlf=input (no attributes)
- CRLF_AUTO_CRLF : core.autocrlf=true  (no attributes)

Sebagai torek menambahkan dalam komentar :

semua terjemahan ini (konversi EOL dari eol=atau autocrlfpengaturan apa pun, dan " clean" filter) dijalankan ketika file berpindah dari pohon-kerja ke indeks , yaitu, selama git adddaripada pada git commitwaktu.
(Catat itu git commit -aatau --onlyatau --includejangan menambahkan file ke indeks pada waktu itu.)

Untuk lebih lanjut tentang itu, lihat " Apa perbedaan antara autocrlf dan eol ".

VONC
sumber
18
Sayangnya, ini tidak menambah kejelasan bagi saya. Sepertinya mereka mengatakan ada masalah dengan implementasi saat ini (tidak jelas apa masalah itu) dan mereka meningkatkan kompleksitas dalam upaya untuk menyelesaikan masalah yang tidak ditentukan. Menurut pendapat saya, pengaturan core.autocrlf sudah terlalu rumit dan kurang didokumentasikan dan situasi yang tampaknya semakin buruk. Sekali lagi terima kasih atas kepala.
Michael Maddox
1
Ini sepertinya bukan solusi yang memuaskan, dan tampaknya memiliki masalah yang sama dengan core.autocrlf. Preferensi saya adalah jika git tidak akan pernah secara otomatis mengubah apa pun, tetapi itu akan memperingatkan pengguna yang ingin menambahkan atau melakukan akhiran baris yang salah. Jadi Anda akan membutuhkan opsi commandline untuk mengizinkan "git add" untuk menambahkan akhiran baris "salah". (mungkin git add adalah tempat yang lebih baik untuk memeriksa ini daripada git commit)
donquixote
Ini akan memaksa pengguna masing-masing untuk mengubah pengaturan editor mereka dan benar-benar mengurus masalah. Meskipun itu akan memungkinkan untuk meninggalkan ujung baris "salah" untuk file dari pihak ke-3, atau yang sudah diperiksa ke dalam repositori.
donquixote
@donquixote lagi, saya setuju. Tetapi core.eoltentang "memodifikasi secara otomatis" hanya apa yang Anda nyatakan secara eksplisit dalam sebuah .gitattributesfile. Ini berbeda dari core.autocrlfyang berlaku untuk file apa pun di repo. Ini adalah proses deklaratif.
VonC
1
@donquixote: Saya menyadari ini sudah cukup tua tetapi saya hanya membaca komentar Anda sekarang. Faktanya, semua terjemahan ini (konversi EOL dari pengaturan eol = atau autocrlf, dan filter "clean") dijalankan ketika file-file berpindah dari pohon-kerja ke indeks, yaitu, selama git addalih-alih pada git commitwaktu. (Catat itu git commit -aatau --onlyatau --includejangan menambahkan file ke indeks pada waktu itu.) Namun, untuk apa nilainya, Anda dan saya dan Linus Torvalds semua membenci gagasan VCS yang pernah memodifikasi apa yang sedang dilakukan. Tetapi ada semua pengguna Windows ... :-)
torek
34

core.autocrlfnilai tidak tergantung pada tipe OS tetapi pada nilai default Windows truedan untuk Linux - input. Saya mengeksplorasi 3 nilai yang mungkin untuk kasus komit dan checkout dan ini adalah tabel yang dihasilkan:

╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║     false    ║     input    ║     true     ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║               ║ LF   => LF   ║ LF   => LF   ║ LF   => LF   ║
║ git commit    ║ CR   => CR   ║ CR   => CR   ║ CR   => CR   ║
║               ║ CRLF => CRLF ║ CRLF => LF   ║ CRLF => LF   ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║               ║ LF   => LF   ║ LF   => LF   ║ LF   => CRLF ║
║ git checkout  ║ CR   => CR   ║ CR   => CR   ║ CR   => CR   ║
║               ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝
Pratt
sumber
5
Ringkasan singkat dalam kata-kata: File dengan CRsendiri tidak pernah disentuh. falsetidak pernah menyentuh ujung garis. trueselalu melakukan LFdan memeriksa sebagai CRLF. Dan inputselalu melakukan apa adanya LFdan memeriksa apa adanya.
Furkan Kambay
7

Inilah pemahaman saya tentang hal itu sejauh ini, kalau-kalau itu membantu seseorang.

core.autocrlf=true dan core.safecrlf = true

Anda memiliki repositori di mana semua ujung jalurnya sama , tetapi Anda bekerja pada platform yang berbeda. Git akan memastikan akhir baris Anda dikonversi ke default untuk platform Anda. Mengapa ini penting? Katakanlah Anda membuat file baru. Editor teks pada platform Anda akan menggunakan akhiran baris default. Ketika Anda memeriksanya, jika Anda tidak memiliki core.autocrlf disetel ke true, Anda telah memperkenalkan inkonsistensi penghentian baris untuk seseorang di platform yang default ke akhiran baris yang berbeda. Saya selalu mengatur safecrlf juga karena saya ingin tahu bahwa operasi crlf dapat dibalik. Dengan kedua pengaturan ini, git memodifikasi file Anda, tetapi itu memverifikasi bahwa modifikasi tersebut dapat dibalik .

core.autocrlf=false

Anda memiliki repositori yang sudah memiliki akhiran garis campur yang dicentang dan memperbaiki ujung saluran yang salah dapat merusak hal-hal lain. Yang terbaik adalah tidak memberi tahu git untuk mengubah akhir baris dalam kasus ini, karena itu akan memperburuk masalah yang dirancang untuk dipecahkan - membuat diff lebih mudah dibaca dan digabung menjadi lebih mudah. Dengan pengaturan ini, git tidak mengubah file Anda .

core.autocrlf=input

Saya tidak menggunakan ini karena alasan untuk ini adalah untuk menutupi kasus penggunaan di mana Anda membuat file yang memiliki ujung garis CRLF pada platform yang default ke ujung garis LF. Saya lebih suka membuat editor teks saya selalu menyimpan file baru dengan default akhir baris platform.

Carl
sumber
3

Tidak, jawaban @jmlane salah.

Untuk Checkin (git add, git commit):

  1. jika textproperti Set, Set value to 'auto', konversi terjadi ketika file telah dilakukan dengan 'CRLF'
  2. jika textproperti Unset: tidak ada yang terjadi, kecuali untukCheckout
  3. jika textproperti Unspecified, konversi tergantung padacore.autocrlf
    1. jika autocrlf = input or autocrlf = true, konversi hanya terjadi ketika file dalam repositori adalah 'LF', jika telah menjadi 'CRLF', tidak ada yang akan terjadi.
    2. jika autocrlf = false, tidak ada yang terjadi

Untuk Checkout:

  1. jika textproperti Unset: tidak ada yang terjadi.
  2. jika textproperti Set, Set value to 'auto: itu tergantung pada core.autocrlf, core.eol.
    1. core.autocrlf = input: tidak ada yang terjadi
    2. core.autocrlf = true: konversi hanya terjadi ketika file dalam repositori adalah 'LF', 'LF' -> 'CRLF'
    3. core.autocrlf = false: konversi hanya terjadi ketika file dalam repositori adalah 'LF', 'LF' -> core.eol
  3. jika textproperti Unspecified, itu tergantung pada core.autocrlf.
    1. sama seperti 2.1
    2. sama seperti 2.2
    3. Tidak ada, tidak ada yang terjadi, core.eol tidak efektif ketika textpropertiUnspecified

Perilaku default

Jadi perilaku Default adalah textproperti adalah Unspecifieddan core.autocrlf = false:

  1. untuk checkin, tidak ada yang terjadi
  2. untuk checkout, tidak ada yang terjadi

Kesimpulan

  1. jika textproperti diatur, perilaku checkin tergantung pada dirinya sendiri, bukan pada autocrlf
  2. autocrlf atau core.eol adalah untuk perilaku checkout, dan autocrlf> core.eol
ViciOs
sumber
2

Melakukan beberapa tes di linux dan windows. Saya menggunakan file uji yang berisi baris yang diakhiri dengan LF dan juga baris yang diakhiri dengan CRLF.
File dikomit, dihapus dan kemudian diperiksa. Nilai dari core.autocrlf ditetapkan sebelum melakukan dan juga sebelum checkout. Hasilnya di bawah.

commit core.autocrlf false, remove, checkout core.autocrlf false: LF=>LF   CRLF=>CRLF  
commit core.autocrlf false, remove, checkout core.autocrlf input: LF=>LF   CRLF=>CRLF  
commit core.autocrlf false, remove, checkout core.autocrlf true : LF=>LF   CRLF=>CRLF  
commit core.autocrlf input, remove, checkout core.autocrlf false: LF=>LF   CRLF=>LF  
commit core.autocrlf input, remove, checkout core.autocrlf input: LF=>LF   CRLF=>LF  
commit core.autocrlf input, remove, checkout core.autocrlf true : LF=>CRLF CRLF=>CRLF  
commit core.autocrlf true, remove, checkout core.autocrlf false: LF=>LF   CRLF=>LF  
commit core.autocrlf true, remove, checkout core.autocrlf input: LF=>LF   CRLF=>LF  
commit core.autocrlf true,  remove, checkout core.autocrlf true : LF=>CRLF CRLF=>CRLF  
Luc Depoorter
sumber