Prosedur saya untuk berurusan dengan akhir baris adalah sebagai berikut (pertempuran diuji pada banyak repo):
Saat membuat repo baru:
- masukkan
.gitattributeskomit pertama bersama dengan file khas lainnya seperti .gitignoredanREADME.md
Saat berurusan dengan repo yang ada:
- Buat / modifikasi
.gitattributessesuai
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n( --no-verifyadalah untuk melewatkan kait pra-komit)
- Saya harus cukup sering melakukannya sehingga saya mendefinisikannya sebagai alias
alias fixCRLF="..."
- ulangi perintah sebelumnya
- ya, itu voodoo, tetapi umumnya saya harus menjalankan perintah dua kali, pertama kali itu menormalkan beberapa file, kedua kali bahkan lebih banyak file. Secara umum mungkin yang terbaik adalah mengulangi sampai tidak ada komit baru dibuat :)
- bolak-balik antara yang lama (sesaat sebelum normalisasi) dan cabang baru beberapa kali. Setelah berpindah cabang, terkadang git akan menemukan lebih banyak file yang perlu dinormalisasi ulang!
Dalam .gitattributesI menyatakan semua file teks secara eksplisit memiliki LF EOL karena umumnya Windows tooling kompatibel dengan LF sementara non-Windows tooling tidak kompatibel dengan CRLF (bahkan banyak alat baris perintah nodejs menganggap LF dan karenanya dapat mengubah EOL dalam file Anda).
Isi dari .gitattributes
.gitattributesBiasanya saya terlihat seperti:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
Untuk mengetahui ekstensi berbeda apa yang dilacak oleh git di repo saat ini, lihat di sini
Masalah setelah normalisasi
Setelah ini selesai, ada satu peringatan lagi yang umum.
Katakanlah Anda mastersudah mutakhir dan dinormalisasi, lalu Anda checkout outdated-branch. Cukup sering setelah memeriksa cabang itu, git menandai banyak file yang dimodifikasi.
Solusinya adalah dengan melakukan commit palsu ( git add -A . && git commit -m 'fake commit') lalu git rebase master. Setelah rebase, komit palsu harus pergi.