Saya ingin memaksa git untuk checkout file di bawah Windows menggunakan LF
tidak CR+LF
. Saya memeriksa dua opsi konfigurasi tetapi saya tidak dapat menemukan kombinasi pengaturan yang tepat.
Saya ingin itu mengkonversi semua file ke LF
dan tetap LF
di file.
Catatan: Saya menggunakan autocrlf = input
tetapi ini hanya memperbaiki file ketika Anda mengkomitnya. Saya ingin memaksanya untuk menggunakannya LF
.
Mungkin saya tidak begitu jelas: repositori sudah menggunakan LF
tetapi file-file yang diperiksa menggunakan msysgit menggunakan CR+LF
dan saya ingin memaksa msysgit untuk mendapatkannya dengan LF
: memaksa ujung garis Unix .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
adalah pilihan yang benar. Tentu saja itu tidak melindungi Anda dari file yang benar-benar adacr+lf
di repositori atau membuat file dengancr+lf
alat lain sebelum menambahkannya ke git. Apa masalah yang Anda alami sehingga ini tidak berhasil?LF
tetapi ketika saya mendapatkannya di Windows msysgit mengubahnya menjadiCR+LF
.autocrlf
set keinput
, git meninggalkanlf
umpan baris sendirian. Bisakah Anda memposting outputgit config
?Jawaban:
OP menambahkan dalam pertanyaannya:
Langkah sederhana pertama masih akan di
.gitattributes
file:(seperti yang tercantum dalam komentar oleh cucu , merujuk pada
.gitattributes
konversi End-of-line ), untuk menghindariCRLF
konversi untuk file dengan benareol
.Dan saya selalu merekomendasikan
git config --global core.autocrlf false
untuk menonaktifkan konversi apa pun (yang akan berlaku untuk semua file versi)Lihat Praktik terbaik untuk konfigurasi lintas platform git?
Sejak Git 2.16 (Q1 2018), Anda dapat menggunakan
git add --renormalize .
untuk.gitattributes
segera menerapkan pengaturan itu.Tetapi langkah kedua yang lebih kuat melibatkan driver filter gitattribute dan menambahkan langkah noda
Setiap kali Anda memperbarui pohon kerja Anda, sebuah skrip bisa, hanya untuk file yang telah Anda tentukan di
.gitattributes
, memaksaLF eol
dan opsi pemformatan lain yang Anda ingin menegakkan.Jika
clear
skrip " " tidak melakukan apa-apa, Anda akan (setelah komit) mengubah file Anda, menerapkan persis format yang Anda butuhkan untuk diikuti.sumber
.txt
ekstensi. Lebih baik untuk membuat ini pertama dan mengujinya pada kelompok tertentu, sebelum generalisasi ke *, dan menambahkan aturan negatif!*.xyz ...
untuk mengecualikan beberapa file dari aturan itu..gitattributes
baris tersebut seharusnya sudah terbaca:*.txt text eol=lf
sesuai git-scm.com/docs/gitattributes.gitattributes
harus kita lakukangit add --renormalize .
Cara yang tepat untuk mendapatkan ujung LF di Windows adalah dengan terlebih dahulu diatur
core.autocrlf
kefalse
:Anda perlu melakukan ini jika Anda menggunakan msysgit, karena ia menetapkannya
true
dalam pengaturan sistemnya.Sekarang git tidak akan melakukan normalisasi akhir baris. Jika Anda ingin file Anda check in ke dinormalisasi, lakukan ini: Set
text=auto
di Anda.gitattributes
untuk semua file:Dan mengatur
core.eol
kelf
:Sekarang Anda juga dapat mengganti satu repo ke crlf (di direktori kerja!) Dengan menjalankan
Setelah Anda selesai melakukan konfigurasi, Anda mungkin ingin git menormalkan semua file di repo . Untuk melakukan ini, buka ke root repo Anda dan jalankan perintah ini:
Jika sekarang Anda ingin git juga menormalkan file di direktori kerja Anda , jalankan perintah ini:
sumber
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Saya kembali ke jawaban ini cukup sering, meskipun tidak ada yang cocok untuk saya. Yang mengatakan, jawaban yang tepat bagi saya adalah campuran dari yang lain.
Yang saya temukan adalah yang berikut:
Untuk repo yang diperiksa setelah pengaturan global itu ditetapkan, semuanya akan diperiksa seperti apa pun yang ada dalam repo - semoga
LF
(\n
). ApaCRLF
pun akan dikonversi menjadi hanyaLF
pada checkin.Dengan repo yang sudah ada yang sudah Anda periksa - yang memiliki akhiran baris yang benar dalam repo tetapi bukan copy pekerjaan Anda - Anda dapat menjalankan perintah berikut untuk memperbaikinya:
Ini akan menghapus (
rm
) secara rekursif (r
) tanpa prompt (-f
), semua file kecuali yang telah Anda edit (--cached
), dari direktori saat ini (.
). Itureset
kemudian mengembalikan semua file-file ke keadaan di mana mereka memiliki akhir baris sejati mereka (matching apa yang ada di repo).Jika Anda perlu memperbaiki akhiran baris file dalam repo, saya sarankan Anda mengambil editor yang memungkinkan Anda melakukannya secara massal seperti IntelliJ atau Sublime Text, tapi saya yakin ada yang bagus kemungkinan akan mendukung ini.
sumber
Notepad++
juga menunjukkan akhir baris dari currenlty file yang dibuka di sudut kanan bawah. Klik kanan pada bidang itu akan memungkinkan Anda untuk mengubah akhir baris.core.autocrlf input
pilihan menimpacore.eol
pengaturan, sehingga pengaturan kedua adalah berlebihan. (Lihat git-scm.com/docs/git-config )Konteks
Jika kamu
Anda bisa melakukannya mulai dengan git 2.10. Diperlukan 2.10 atau lebih baru, karena 2.10 memperbaiki perilaku text = auto bersama dengan eol = lf . Sumber .
Larutan
Letakkan
.gitattributes
file di root repositori git Anda yang memiliki konten berikut:Lakukan itu.
Tweak opsional
Anda juga dapat menambahkan
.editorconfig
di root repositori Anda untuk memastikan bahwa perkakas modern membuat file baru dengan akhiran baris yang diinginkan.sumber
core.autocrlf=input
adalah pengaturan yang tepat untuk apa yang Anda inginkan, tetapi Anda mungkin harus melakukangit update-index --refresh
dan / ataugit reset --hard
agar perubahan tersebut berlaku.Dengan
core.autocrlf
set toinput
, git tidak akan menerapkan konversi baris baru saat check-out (jadi jika Anda memiliki LF di repo, Anda akan mendapatkan LF), tetapi itu akan memastikan bahwa jika Anda mengacaukan dan memperkenalkan beberapa CRLF dalam bekerja salin entah bagaimana, mereka tidak akan masuk ke repo.sumber
Anda dapat menemukan solusi untuk masalah ini di: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings
Deskripsi sederhana tentang bagaimana Anda dapat memecahkan masalah ini di windows:
Pengaturan global untuk akhir baris Perintah git config core.autocrlf digunakan untuk mengubah cara Git menangani akhir baris. Dibutuhkan satu argumen.
Di Windows, Anda cukup meneruskan true ke konfigurasi. Sebagai contoh: C:> git config --global core.autocrlf true
Semoga beruntung, saya harap saya membantu.
sumber