Saya mencoba membuat git tidak mengubah akhir baris apa pun untuk operasi apa pun. Sayangnya, tampaknya demikian tidak peduli apa. Saya telah menguranginya menjadi kasus uji berikut, yang memiliki mekanisme berbeda untuk menonaktifkan perilaku ini sebanyak yang dapat saya temukan.
- Mulailah dengan dua mesin (komputer Windows = A, komputer Linux = B)
- Di kedua mesin:
git config --global core.autocrlf false
- Di kedua mesin:
git config --global core.eol crlf
(untuk berjaga-jaga)
- Buat repositori baru di A. Dari folder kosong:
git init --shared
(lalu perlihatkan.git
direktori yang dibuat )- Buat file baru
.gitignore
di repositori - Buat file baru
.gitattributes
di repositori dengan satu baris:* -text
git add .
, lalugit commit -m "initial commit"
untuk menyiasatinya, misalnya ini .git branch master_recv
- Tambahkan remote
- Buat file baru
document.txt
di repositori yang berisi CRLF - Komit:,
git add -A
lalugit commit -m "<something>"
- Perhatikan bahwa A
document.txt
masih berisi CRLF (dan menghapusnya dan mengatur ulang dengan--hard
mengembalikan versi yang masih dengan CRLF)
- SCP seluruh direktori ke komputer B
- Tambahkan file baru yang
new file
berisi CRLF - Melakukan:
git add -A
lalugit commit -m "<something>"
- Perhatikan bahwa B
document.txt
dan Bnew file
keduanya masih mengandung CRLF
- Tarik master B ke A:
git pull <remote> master:master_recv
- A
document.txt
telah berubah menjadi LF. File yang ditambahkannew file
juga berisi LF.
Masalah tidak terjadi jika B adalah mesin Windows.
core.autocrlf
selalu salah? Sepertinya Anda sudah memiliki\n
akhiran baris di repositori Anda? Tidak ada pengaturan untuk diubah\n
dalam repositori Anda ke\r\n
dalam direktori kerja Anda.Jawaban:
Di dalam proyek Anda, harus ada
.gitattributes
file. Biasanya, ini akan terlihat seperti di bawah (atau cuplikan layar ini ):Ubah
* text=auto
ke* text=false
untuk menonaktifkan penanganan otomatis (lihat tangkapan layar ).Seperti ini:
Jika proyek Anda tidak memiliki file .gitattributes, maka akhiran baris disetel oleh konfigurasi git Anda. Untuk mengubah konfigurasi git Anda, lakukan ini:
Buka file konfigurasi di direktori ini:
1) C: \ ProgramData \ Git \ config
2) Buka file konfigurasi di Notepad ++ (atau editor teks apa pun yang Anda inginkan)
3) Ubah "autocrlf =" menjadi false.
sumber
* text=false
not unset text: membiarkan teks disetel ke nilai string salah. Ini memiliki efek yang sama dengan membiarkan teks tidak ditentukan (tidak secara khusus tidak disetel). Menggunakan* -text
memberikannya pengaturan khusus yang tidak disetel. Membatalkan pengaturan atribut teks di jalur memberitahu git untuk tidak mencoba konversi akhir baris apa pun saat check in atau checkout.* text=false
tidak berpengaruh. Harap perbaiki jawabannya!Salah satu solusi sederhana adalah:
git config --global core.autocrlf false
git add --renormalize .
Jika ada konversi yang dilakukan secara otomatis, itu berarti ada
.gitattributes
core.eol
arahan di dalam repo.Dengan Git 2.8+ (Maret 2016) , periksa apakah masih ada transformasi eol dengan:
sumber
autocrlf
HARI INI! unsettedautocrlf
setara denganfalse
. Anda tertinggal di belakang pergerakan trendi di Git1.8.5.2
.git config core.autocrlf false
- menyebutkan ini karena umumnya autocrlf harustrue
untuk windows daninput
untuk orang lain, tetapi terkadang Anda memerlukan sesuatu yang spesifik untuk kasus edge yang aneh. Dalam kasus saya, saya telah mengunduh beberapa file dan ingin mencatat perubahan yang saya buat sehingga saya dapat mengingat apa yang telah saya lakukan (bukan melacak perubahan pada kode). Saya tidak tahu apakah akhiran baris itu penting (dan ingin perbedaannya masuk akal dibandingkan dengan "yang sebenarnya") jadi saya menonaktifkan autocrlf.Saya menemukan jawabannya. Tampaknya program SCP mengubah akhir baris. Saya perhatikan ini ketika saya mencoba dengan sengaja membuat file dengan akhiran LF dan kemudian mengamati bahwa itu muncul sebagai CRLF saat diunduh.
Karena ini adalah solusi untuk saya, saya menerima jawaban ini, tetapi orang-orang di masa depan juga harus mengacu pada jawaban lain untuk solusi yang lebih umum.
sumber
Dari gitattributes (5) Halaman Manual topik "Efek"
core.autocrlf
di (1.7.2+) baru Git tidak digunakan,core.eol
dan pengaturan yang benar | penghapusan atribut teks dianggap sebagai cara yang lebih dapat diandalkansumber
.gitattributes
file tersebut, saya telah secara eksplisit menonaktifkan semuanya sebagai teks, bukan? Juga, saya tidak melihatnya dengan opsi untuk membuatnya tidak melakukan konversi (meskipuncrlf
mungkin tidak berpengaruh)?text
dan mencegah konversi apa pun, Anda harus menetapkan .gitattributes ke* -text
dan tidak ke* text=false
.false
bukan nilai yang valid untuktext
atribut - git tidak akan mengenalinya dan sebagai gantinya akan kembali ke pengaturan autocrlf default. Selain itu, setelah mengubahtext
nilai, Anda harus mencadangkan semua file dari repo lokal Anda, melakukan komit, lalu memulihkan file dengan ujung baris yang benar sesuai kebutuhan, dan memasukkannya kembali. Kemudian akhir baris Anda tidak akan pernah dimodifikasi oleh git lagi.