Cara mengubah pengaturan akhir baris

582

Apakah ada file atau menu yang memungkinkan saya mengubah pengaturan tentang cara menangani akhir baris?

Saya membaca ada 3 opsi:

  1. Lihat gaya Windows, lakukan gaya Unix

    Git akan mengkonversi LF ke CRLF ketika memeriksa file teks. Saat melakukan file teks, CRLF akan dikonversi ke LF. Untuk proyek lintas platform, ini adalah pengaturan yang disarankan di Windows ("core.autocrlf" disetel ke "true")

  2. Checkout apa adanya, komit gaya Unix

    Git tidak akan melakukan konversi apa pun ketika memeriksa file teks. Saat melakukan file teks, CRLF akan dikonversi ke LF. Untuk proyek lintas-platform, ini adalah pengaturan yang disarankan pada Unix ("core.autocrlf" diatur ke "input").

  3. Periksa apa adanya, komit apa adanya

    Git tidak akan melakukan konversi saat memeriksa atau melakukan file teks. Memilih opsi ini tidak disarankan untuk proyek lintas platform ("core.autocrlf" disetel ke "false")

qwertymk
sumber
3
Manakah dari ini yang merupakan standar?
Stephen
2
Nevermind sepertinya default itu benar, yang menurut saya tepat.
Stephen
19
Saya benar-benar menemukan bahwa opsi 3-rd bekerja lebih baik. Kalau tidak, saya sering berada dalam situasi ketika saya mengedit skrip batch dan sh pada platform yang sama (Windows / Linux) dan kemudian mengkomitnya dan Git secara otomatis "memperbaiki" garis akhir untuk satu platform ... Tidak, saya lebih suka untuk mandiri sadar tentang akhir baris dan komit / checkout mereka persis seperti apa adanya.
JustAMartin
1
@Neutrino Saya berharap ini benar, tetapi salah satu contoh IDE yang mengacaukan akhir baris Anda (dan tidak menawarkan opsi konfigurasi yang masuk akal untuk mematikannya) adalah Visual Studio.
Cássio Renan

Jawaban:

530

Cara normal untuk mengendalikan ini adalah dengan git config

Sebagai contoh

git config --global core.autocrlf true

Untuk detailnya, gulir ke bawah di tautan ini ke Pro Git ke bagian bernama "core.autocrlf"


Jika Anda ingin tahu file apa yang disimpan ini, Anda dapat menjalankan perintah:

git config --global --edit

dan file konfigurasi global git harus terbuka di editor teks, dan Anda dapat melihat dari mana file itu diambil.

CodingWithSpike
sumber
17
trueatau falsehanya dua opsi, penginstal memiliki tiga
qwertymk
49
inputadalah opsi ke-3 (sebagaimana dinyatakan dalam tautan yang saya berikan). 3 opsi adalah true| false| input
CodingWithSpike
2
Berikut adalah pertanyaan SO yang bagus untuk masalah ini: stackoverflow.com/questions/3206843/…
CodingWithSpike
31
Sebenarnya, jika Anda membaca kembali pertanyaan Anda sendiri, dalam salinan / kutipan yang dilampirkan: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"jadi pada dasarnya Anda menjawab pertanyaan Anda sendiri? :)
CodingWithSpike
2
Ini adalah cara lama untuk mengelilinginya. Lihatlah file .gitattributes.
eftshift0
176

Format akhir baris yang digunakan dalam OS

  • Windows: CR(Carriage Return \r) dan pasangan LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

Kita dapat mengonfigurasi git untuk mengoreksi format akhir baris untuk setiap OS dengan dua cara.

  1. Git Konfigurasi global
  2. Gunakan .gitattributesfile

Konfigurasi Global

Di Linux / OSX
git config --global core.autocrlf input

Hal ini akan memperbaiki CRLFuntuk LFsaat Anda komit.

Di Windows
git config --global core.autocrlf true

Ini akan memastikan ketika Anda checkout di windows, semua LFakan dikonversi keCRLF

.gitattributes File

Merupakan ide bagus untuk menyimpan .gitattributesfile karena kami tidak ingin semua orang di tim kami mengatur konfigurasi mereka. File ini harus disimpan di jalur root repo dan jika ada, git akan menghormatinya.

* text=auto

Ini akan memperlakukan semua file sebagai file teks dan mengonversi ke baris OS yang berakhir pada checkout dan kembali ke LFkomit secara otomatis. Jika ingin memberi tahu secara eksplisit, maka gunakan

* text eol=crlf
* text eol=lf

Yang pertama adalah untuk checkout dan yang kedua adalah untuk komit.

*.jpg binary

Perlakukan semua .jpggambar sebagai file biner, apa pun lintasannya. Jadi tidak perlu konversi.

Atau Anda dapat menambahkan kualifikasi jalur:

my_path/**/*.jpg binary
Jasnan
sumber
3
Bagaimana dengan OS X, yang menggunakan CR(carriage return) sendiri?
jww
23
Legacy MacOS (yaitu, MacOS 9 dan sebelumnya) digunakan CRsendiri, tetapi OS X umumnya menggunakan LF.
Zachary Ware
2
Bisakah saya menggunakan * text eol=lfdua kali untuk checkout LFpada Windows?
mbomb007
1
Menurut pengaturan dokumentasi gitattributes,* text=auto mari git memutuskan apakah kontennya berupa teks atau bukan. Memaksa semua file menjadi teks seharusnya * texthanya.
Adrian W
Bagaimana cara mengatur eol=crfile pada Mac OS 9 dan platform lawas lainnya?
NobleUplift
36

Untuk solusi pengaturan repositori, yang dapat didistribusikan kembali ke semua pengembang, periksa atribut teks dalam file .gitattributes . Dengan cara ini, pengembang tidak harus secara manual mengatur akhir baris mereka sendiri di repositori, dan karena repositori yang berbeda dapat memiliki gaya akhir baris yang berbeda, global core.autocrlf bukanlah yang terbaik, setidaknya menurut saya.

Misalnya menghapus atribut ini di jalur yang diberikan [ . - text] akan memaksa git untuk tidak menyentuh ujung garis saat check in dan check out. Menurut pendapat saya, ini adalah perilaku terbaik, karena sebagian besar editor teks modern dapat menangani kedua jenis ujung baris. Juga, jika Anda sebagai pengembang masih ingin melakukan konversi akhir baris saat check-in, Anda masih dapat mengatur jalur untuk mencocokkan file tertentu atau mengatur atribut eol (dalam .gitattributes) di repositori Anda.

Juga periksa pos terkait ini, yang menjelaskan atribut file dan teks secara lebih rinci: Apa strategi penanganan CRLF (carriage return, line feed) terbaik dengan Git?

Fazi
sumber
. - textberi is not a valid attribute name: .gitattributes:1tolong cantumkancat .gitattributes
jangorecki
3

Bagi saya apa triknya menjalankan perintah

git config auto.crlf false

di dalam folder proyek, saya menginginkannya secara khusus untuk satu proyek.

Perintah itu mengubah file di path {project_name} /. Git / config (fyi .git adalah folder tersembunyi) dengan menambahkan baris

[auto]
    crlf = false

di akhir file. Saya kira mengubah file melakukan trik yang sama juga.

Perjalanan dan pemikat kode
sumber
1

Jika Anda ingin mengonversi kembali format file yang telah diubah ke Format UNIX dari format PC.

(1) Anda harus menginstal ulang tortoise GIT dan di bagian "Line Ending Conversion" pastikan Anda telah memilih "Check out as is - Check in as is".

(2) dan pertahankan konfigurasi yang tersisa apa adanya.

(3) setelah instalasi selesai

(4) tulis semua ekstensi file yang dikonversi ke format UNIX menjadi file teks (extensions.txt).

ex:*.dsp
   *.dsw

(5) salin file ke klon Anda. Jalankan perintah berikut di GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Nishanth
sumber