Sebagian besar .gitattributes
file memiliki * text=auto
. Apa tujuan dari text=auto
file itu?
sumber
Sebagian besar .gitattributes
file memiliki * text=auto
. Apa tujuan dari text=auto
file itu?
Dari dokumen :
Setiap baris dalam
.gitattributes
(atau.git/info/attributes
) file berbentuk:pattern attr1 attr2 ...
Jadi di sini, polanya adalah *
, yang berarti semua file, dan atributnya adalah text=auto
.
Apa yang text=auto
harus dilakukan Dari dokumentasi:
Ketika teks diatur ke "otomatis", jalan ditandai untuk normalisasi end-of-line otomatis. Jika Git memutuskan bahwa kontennya adalah teks, ujung barisnya dinormalisasi menjadi LF pada checkin.
Apa perilaku default jika tidak diaktifkan?
Tidak ditentukan
Jika atribut teks tidak ditentukan, Git menggunakan variabel konfigurasi core.autocrlf untuk menentukan apakah file tersebut harus dikonversi.
Apa yang core.autocrlf
harus dilakukan Dari dokumen:
core.autocrlf
Mengatur variabel ini ke "true" hampir sama dengan mengatur atribut teks ke "auto" pada semua file kecuali bahwa file teks tidak dijamin akan dinormalisasi: file yang berisi CRLF di repositori tidak akan disentuh. Gunakan pengaturan ini jika Anda ingin memiliki ujung garis CRLF di direktori kerja Anda meskipun repositori tidak memiliki ujung garis yang dinormalisasi. Variabel ini dapat diatur ke input, dalam hal ini tidak ada konversi output yang dilakukan.
Jika Anda menganggap ini sejelas lumpur, Anda tidak sendirian.
Inilah yang * text=auto
dilakukan dalam kata-kata saya: ketika seseorang melakukan file, Git menebak apakah file itu adalah file teks atau tidak, dan jika ya, itu akan melakukan versi file di mana semua byte CR + LF diganti dengan LF byte. Itu tidak secara langsung mempengaruhi seperti apa file di pohon kerja, ada pengaturan lain yang akan mengkonversi LF byte ke CR + LF byte ketika memeriksa file.
Saya akan tidak merekomendasikan menempatkan * text=auto
di .gitattributes
berkas. Sebagai gantinya, saya akan merekomendasikan sesuatu seperti ini:
*.txt text
*.html text
*.css text
*.js text
Ini secara eksplisit menunjuk file mana yang merupakan file teks, yang membuat CRLF dikonversi ke LF dalam database objek (tetapi tidak harus di pohon kerja). Kami memiliki repo dengan * text=auto
, dan Git salah menebak untuk file gambar bahwa itu adalah file teks, menyebabkannya rusak ketika diganti CR + LF byte dengan LF byte di database objek. Itu tidak menyenangkan untuk di-debug.
Jika Anda harus menggunakan * text=auto
, masukkan sebagai baris pertama .gitattributes
, sehingga baris selanjutnya dapat menimpanya. Ini tampaknya menjadi praktik yang semakin populer.
everyone
mengacu padagit-scm
, itu mungkin karena mereka sedang mengembangkan paket nix * dan dengan demikian menggunakan * karakter nix baris baru adalah biasa .git-scm
berasal dari * nix. MacOS menggunakan LF. Hanya Windows (hanya untuk OS aliran utama) yang menggunakan CRLF. Ini membuat devs lebih sulit menggunakan alat * nix di Windows dan untuk semua orang saat bertukar file. Lihat juga Mengapa CRLF .*.txt text=auto
dan*.txt text
tolong? Saya pikir semua 4 baris dalam contoh Anda di atas seharusnyatext=auto
, tidak hanyatext
setelah ekstensi file. File jejak KiCad, misalnya (ekstensi ".kicad_mod"), dinormalisasi menggunakan baris ini dalam file gitattributes mereka:*.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).Ini memastikan ujung garis dinormalisasi. Sumber: Kernel.org
sumber
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, bahkan di windows?Konfigurasi itu berkaitan dengan bagaimana ujung baris ditangani. Saat diaktifkan, semua ujung baris dikonversi ke LF di repositori. Ada beberapa flag lain untuk menangani bagaimana akhir baris dikonversi di direktori kerja Anda. Info lengkap tentang masalah kami di sini: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
sumber