env:
- Windows 7
- msysgit
Wheng I git commit
, katanya:
warning: LF will be replaced by CRLF.
Apakah peringatan ini mundur?
Saya mengedit file di Windows, akhir baris adalah CRLF
, seperti gambar ini:
Dan git mengubahnya LF
untuk berkomitmen untuk repo.
Jadi saya pikir peringatan yang benar adalah:
warning: CRLF will be replaced by LF.
Jawaban:
Bergantung pada editor yang Anda gunakan, file teks dengan LF tidak perlu disimpan dengan CRLF: editor terbaru dapat mempertahankan gaya eol. Tapi itu pengaturan konfigurasi git bersikeras mengubah mereka ...
Pastikan saja (seperti yang saya rekomendasikan di sini ):
Dengan begitu, Anda menghindari transformasi otomatis, dan masih dapat menentukannya melalui
.gitattributes
file dancore.eol
arahan .Tidak: Anda menggunakan Windows, dan
git config
halaman bantuan menyebutkanSeperti yang dijelaskan dalam " git mengganti LF dengan CRLF ", itu hanya akan terjadi pada checkout (tidak komit), dengan
core.autocrlf=true
.Seperti disebutkan dalam Xiaopeng 's jawaban , bahwa peringatan adalah sama dengan:
Sebagaimana disebutkan dalam
git-for-windows/git
edisi 1242 :Catatan: Git 2.19 (September 2018), saat menggunakan
core.autocrlf
, peringatan palsu "LF akan digantikan oleh CRLF" sekarang ditekan .Seperti komentar quaylar dengan benar , jika ada konversi pada komit, itu hanya untuk .
LF
Peringatan khusus itu "
LF will be replaced by CRLF
" berasal dari convert.c # check_safe_crlf () :Itu disebut dengan
convert.c#crlf_to_git()
, itu sendiri disebut denganconvert.c#convert_to_git()
, itu sendiri disebut denganconvert.c#renormalize_buffer()
.Dan yang terakhir
renormalize_buffer()
hanya dipanggil olehmerge-recursive.c#blob_unchanged()
.Jadi saya menduga konversi ini terjadi
git commit
hanya jika komit dikatakan merupakan bagian dari proses penggabungan.Catatan: dengan Git 2.17 (Q2 2018), pembersihan kode menambah beberapa penjelasan.
Lihat commit 8462ff4 (13 Jan 2018) oleh Torsten Bögershausen (
tboegi
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 9bc89b1 , 13 Feb 2018)Perhatikan bahwa regresi yang diperkenalkan pada 8462ff4 ("
convert_to_git()
:safe_crlf/checksafe
menjadiint conv_flags
", 2018-01-13, Git 2.17.0) kembali dalam siklus Git 2.17 menyebabkanautocrlf
penulisan ulang menghasilkan pesan peringatan meskipun telahsafecrlf=false
diatur .Lihat komit 6cb0912 (04 Jun 2018) oleh Anthony Sottile (
asottile
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 8063ff9 , 28 Jun 2018)sumber
core.autocrlf=true
akan selalu menghasilkan LF di repo, dan CRLF di working tree imho (bahkan di bawah non-Windows). Sumber: linkYA peringatannya mundur.
Dan sebenarnya itu seharusnya tidak menjadi peringatan. Karena semua peringatan ini mengatakan (tetapi sayangnya mundur) adalah bahwa karakter CRLF dalam file Anda dengan ujung garis Windows akan diganti dengan LF saat komit. Yang berarti itu dinormalisasi ke akhir baris yang sama yang digunakan oleh * nix dan MacOS.
Tidak ada yang aneh terjadi, ini adalah perilaku yang biasanya Anda inginkan.
Peringatan ini dalam bentuk saat ini adalah salah satu dari dua hal:
;)
sumber
--Perbaharui pada 9 Juli ---
Dihapus "Itu benar dan akurat" seperti yang dikomentari oleh @mgiuca
======
TIDAK . Ini TIDAK berbicara tentang file Anda saat ini dengan
CRLF
. Alih-alih itu berbicara tentang file denganLF
.Itu harus membaca:
Gambar ini harus menjelaskan apa artinya.
sumber
Semua ini mengasumsikan
core.autocrlf=true
Kesalahan asli:
Apa yang harus dibaca kesalahan:
Penjelasan di sini :
Pada dasarnya, file lokal yang sebelumnya LF sekarang akan memiliki CRLF secara lokal
sumber
git config --global core.autocrlf false
berfungsi dengan baik untuk pengaturan global.Tetapi jika Anda menggunakan Visual Studio, mungkin juga perlu memodifikasi
.gitattributes
untuk beberapa jenis proyek ( misalnya aplikasi perpustakaan c # class ):* text=auto
sumber
Setelah saya mengatur
core.autocrlf=true
saya mendapatkan "LF akan diganti oleh CRLF" (perhatikan bukan "CRLF akan digantikan oleh LF") ketika saya sedanggit add
(atau mungkin itu padagit commit
?) File yang diedit di windows pada repositori (yang tidak menggunakan LF) yang sudah diperiksa sebelum saya setcore.autocrlf=true
.Saya sudah melakukan checkout baru
core.autocrlf=true
dan sekarang saya tidak mendapatkan pesan itu.sumber
Jika Anda menggunakan Visual Studio 2017, 2019, Anda dapat:
sumber
.gitconfig
atau.git/config
tidak.gitignore
, yang menentukan file yang akan diabaikan oleh git.Lakukan hal yang sederhana:
sumber