Saya memiliki repositori Git yang diakses dari Windows dan OS X, dan yang saya tahu sudah berisi beberapa file dengan akhiran CRLF. Sejauh yang saya tahu, ada dua cara untuk mengatasinya:
Diatur
core.autocrlf
kefalse
mana - mana,Ikuti instruksi di sini (digaungkan di halaman bantuan GitHub) untuk mengonversi repositori menjadi hanya berisi akhir-baris LF, dan setelah itu disetel
core.autocrlf
ketrue
Windows daninput
pada OS X. Masalah dengan melakukan ini adalah jika saya memiliki file biner di repositori bahwa:- tidak ditandai dengan benar sebagai biner di gitattributes, dan
- kebetulan mengandung CRLF dan LF,
mereka akan rusak. Mungkin repositori saya berisi file-file seperti itu.
Jadi mengapa saya tidak mematikan saja konversi akhir baris Git? Ada banyak peringatan samar di web tentang core.autocrlf
mematikan yang menyebabkan masalah, tetapi sangat sedikit yang spesifik ; satu-satunya yang saya temukan sejauh ini adalah bahwa kdiff3 tidak dapat menangani akhiran CRLF (bukan masalah bagi saya), dan bahwa beberapa editor teks memiliki masalah akhir baris (juga bukan masalah bagi saya).
Repositori adalah internal perusahaan saya, jadi saya tidak perlu khawatir membagikannya dengan orang-orang dengan pengaturan autocrlf yang berbeda atau persyaratan akhir baris.
Apakah ada masalah lain dengan hanya meninggalkan garis akhir karena-saya tidak menyadarinya?
sumber
autocrlf
ke false.autocrlf
ke false. Saya mencari alasan untuk menjadikannya benar.autocrlf = input
: tampaknya ini adalah resolusi sempurna antara kedua ekstrem: Anda menjaga repo Anda bersih dari omong kosong CRLF, dan secara lokal pengembang Windows dapat menggunakan apa pun yang mereka inginkan tanpa file lokal mereka memiliki sihir yang dilakukan secara otomatis kepada mereka. (Mereka mungkin menginginkan LF secara lokal karena berbagai alasan, jaditrue
itu buruk, menurut saya.) Saya tidak bisa melihat ada kerugian untuk menggunakanautocrlf = input
.Jawaban:
Alasan hanya khusus untuk set
autocrlf
ketrue
adalah:git status
menampilkan semua file Andamodified
karena konversi EOL otomatis yang dilakukan ketika mengkloning repo EOL Git berbasis Unix ke yang Windows (lihat masalah 83 misalnya)Kecuali Anda dapat melihat perawatan khusus yang harus berurusan dengan EOL asli, Anda lebih baik pergi
autocrlf
kefalse
(git config --global core.autocrlf false
).Perhatikan bahwa konfigurasi ini akan menjadi konfigurasi lokal (karena konfigurasi tidak didorong dari repo ke repo)
Jika Anda menginginkan konfigurasi yang sama untuk semua pengguna yang mengkloning repo itu, lihat " Apa
CRLF
strategi penanganan terbaik dengan git? ", Menggunakantext
atribut dalam.gitattributes
file .Contoh:
Catatan: mulai git 2.8 (Maret 2016), marka gabungan tidak akan lagi memperkenalkan akhiran campuran garis (LF) dalam file CRLF.
Lihat " Buat Git menggunakan CRLF pada baris gabungan" <<<<<<< HEAD " "
sumber
autocrlf=false
. Karena ketertarikan, apakah Anda tahu mengapa git masih melakukan konversi awal bahkan jika Anda memiliki autoclf yang disetel ke false?core.autocrlf=false
dalam skenario saya adalah jika saya memiliki beberapa alat / editor yang akan bingung dengan akhir baris?false
, saya tidak pernah menjadi penggemar berat hal-hal otomatis atau sihir yang terjadi di latar belakang. Cukup gunakan\n
dan diUTF-8
mana - mana dan Anda akan baik-baik saja. Jika beberapa orang gila tidak mengerti bahwa ada konvensi dan aturan dan lupa untuk menggunakanUTF-8
atau\n
, maka seseorang mengubahnya secara manual dan menampar wajahnya.core.eol
atribut dalam.gitattributes
file, daripada menggunakancore.autocrlf
pengaturan global ini yang berlaku tanpa pandang bulu untuk semua file.Saya seorang pengembang .NET, dan telah menggunakan Git dan Visual Studio selama bertahun-tahun. Rekomendasi saya yang kuat adalah mengatur akhir baris menjadi true. Dan lakukan sedini mungkin dalam masa penyimpanan Anda.
Yang sedang berkata, saya benci Git mengubah akhir baris saya. Kontrol sumber hanya akan menyimpan dan mengambil pekerjaan yang saya lakukan, itu TIDAK boleh memodifikasinya. Pernah. Tapi itu benar.
Apa yang akan terjadi jika Anda tidak membuat setiap pengembang disetel ke true, adalah SATU pengembang akhirnya akan disetel ke true. Ini akan mulai mengubah akhir baris semua file Anda ke LF di repo Anda. Dan ketika pengguna disetel ke false memeriksa itu, Visual Studio akan memperingatkan Anda, dan meminta Anda untuk mengubahnya. Anda akan memiliki 2 hal terjadi dengan sangat cepat. Satu, Anda akan mendapatkan semakin banyak peringatan itu, semakin besar tim Anda semakin banyak Anda dapatkan. Yang kedua, dan lebih buruk, adalah bahwa hal itu akan menunjukkan bahwa setiap baris dari setiap file yang diubah telah diubah (karena ujung baris dari setiap baris akan diubah oleh orang yang sebenarnya). Akhirnya, Anda tidak akan lagi dapat melacak perubahan dalam repo Anda. Jauh lebih mudah dan bersih untuk membuat semua orang tetap benar, daripada mencoba membuat semua orang salah. Sama mengerikannya dengan hidup dengan fakta bahwa kendali sumber tepercaya Anda melakukan sesuatu yang seharusnya tidak. Pernah.
sumber
\r\n
dan Anda akan melihat.true
"? Mengapa Anda membiarkan mereka begitu saja? ketika Anda mengaturnya untuk mengakses git repo, maka sama seperti Anda tidak mengizinkan mencemari area-area tertentu dengan langs yang berbeda (jadi siapa pun yang mengerjakannya bisa membacanya), atau sama seperti Anda menyimpan cabang / gabungan / rebases / dll di sepanjang yang dipilih kebijakan, mereka harus mendapatkan aturan yang jelas: atur crlf yang benar.Pembaruan 2 :
Xcode 9 tampaknya memiliki "fitur" di mana ia akan mengabaikan akhir baris saat ini file, dan alih-alih hanya menggunakan pengaturan akhir baris default Anda ketika memasukkan baris ke dalam file, menghasilkan file dengan akhiran garis campuran.
Saya cukup yakin bug ini tidak ada di Xcode 7; tidak yakin tentang Xcode 8. Kabar baiknya adalah bahwa tampaknya diperbaiki dalam Xcode 10.
Untuk waktu itu ada, bug ini menyebabkan sejumlah kecil kegembiraan dalam basis kode yang saya rujuk dalam pertanyaan (yang sampai hari ini menggunakan
autocrlf=false
), dan menyebabkan banyak "EOL" melakukan pesan dan akhirnya ke saya menulis gitpre-commit
hook untuk memeriksa untuk / mencegah memperkenalkan akhiran garis campuran.Perbarui :
Catatan: Seperti yang dicatat oleh VonC, mulai dari Git 2.8, marka gabungan tidak akan memperkenalkan akhir baris gaya Unix ke file gaya Windows .
Asli :
Satu cegukan kecil yang saya perhatikan dengan pengaturan ini adalah ketika ada konflik penggabungan, baris git menambahkan untuk menandai perbedaan tidak memiliki akhir baris Windows, bahkan ketika sisa file tidak, dan Anda dapat berakhir dengan file dengan akhiran garis campuran, misalnya:
Ini tidak menimbulkan masalah bagi kami (saya bayangkan alat apa pun yang dapat menangani kedua jenis end-line juga akan masuk akal dengan campuran end-line - tentu saja semua yang kami gunakan lakukan), tetapi itu adalah sesuatu yang harus diperhatikan.
Hal lain * yang kami temukan, adalah ketika menggunakan
git diff
untuk melihat perubahan pada file yang memiliki end-line Windows, baris yang telah ditambahkan akan menampilkan carriage return mereka, dengan demikian:* Itu tidak benar-benar pantas istilah: "masalah".
sumber