Jika Git tiba-tiba menandai hampir setiap file sebagai dimodifikasi di Mac Anda, konversi line ending mungkin membuat salinan kerja berbeda dari versi yang dilacak Git. Pertama-tama periksa repositori sebelum mengubah atau memulihkan file. Kemudian gunakan pengaturan Git yang sesuai untuk macOS, dan lakukan normalisasi ulang hanya setelah mengamankan suntingan yang sebenarnya. Git merekomendasikan penyimpanan teks dengan akhiran LF; panduan macOS-nya menggunakan core.autocrlf input. Panduan line-ending GitHub
Mengapa line ending bisa membuat setiap file tampak berubah?
Sebuah line ending menandai akhir dari setiap baris: LF gaya Unix menggunakan satu karakter, sedangkan CRLF gaya Windows menggunakan carriage return ditambah line feed. Jika Git atau editor mengubah akhiran baris di seluruh salinan kerja, Git mungkin melaporkan perubahan file secara luas meskipun teksnya sendiri terlihat sama. Git dapat menormalisasi teks ke LF di indeksnya dan menerapkan akhiran yang berbeda saat melakukan checkout file, tergantung pada konfigurasi dan .gitattributes. Dokumentasi gitattributes Git
Periksa repositori sebelum memperbaikinya
Buka Terminal, masuk ke repositori, lalu periksa status serta pengaturan line ending-nya:
git status --short
git config --show-origin --get core.autocrlf
git ls-files --eol
Perintah config mungkin tidak menampilkan apa pun jika tidak ada nilai yang diatur. --show-origin membantu mengidentifikasi file konfigurasi mana yang menyediakan pengaturan tersebut. Di git ls-files --eol, bandingkan akhiran indeks (i/) dan pohon kerja/working-tree (w/); mixed menandakan akhiran yang bercampur. Nilai attr/ menunjukkan atribut yang berlaku. Git mendokumentasikan output ini sebagai diagnostik indeks, pohon kerja, dan atribut line ending. Dokumentasi git-ls-files Git
Periksa juga apakah ada suntingan sebenarnya sebelum melanjutkan. Jika Anda menemukan perubahan yang diinginkan, lakukan commit atau salin ke tempat yang aman. Jangan gunakan pemulihan (restore) atau reset secara membabi buta sebagai perbaikan line ending: perintah-perintah tersebut dapat membuang hasil kerja Anda. File biner memerlukan perhatian khusus karena konversi line ending dapat merusak data jika Git memperlakukannya sebagai teks. Dokumentasi git-config Git
Tetapkan default yang wajar untuk macOS
Untuk penggunaan Git Anda sendiri di berbagai repositori, tetapkan preferensi macOS yang terdokumentasi:
git config --global core.autocrlf input
Dengan input, Git menormalisasi CRLF ke LF saat menambahkan teks, tanpa mengonversi file LF ke CRLF saat checkout. Pengaturan ini tidak serta-merta menyelesaikan kebijakan setiap file: atribut repositori dapat menentukan perilaku berdasarkan jenis file, dan atribut text serta eol dari Git mengontrol normalisasi dan akhiran checkout. Panduan khusus platform GitHub dan Referensi konfigurasi Git
Jika masalah terbatas pada satu proyek, utamakan kebijakan .gitattributes proyek tersebut daripada mengubah konfigurasi global Anda demi menyesuaikan satu repositori. Titik awal yang umum adalah * text=auto; format tertentu dapat dipatok ke LF atau CRLF, sedangkan format biner harus ditandai binary. Misalnya, skrip shell umumnya membutuhkan LF, sementara beberapa file proyek Windows membutuhkan CRLF. Pola yang benar bergantung pada perkakas dan kolaborator repositori. Contoh gitattributes Git
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.png binary
Normalisasi ulang hanya setelah meninjau perubahannya
Mengubah konfigurasi atau atribut tidak menjamin bahwa file yang ada akan langsung menjadi konsisten. Prosedur pembaruan yang terdokumentasi di GitHub terlebih dahulu menyimpan atau meng-commit pekerjaan yang belum selesai, lalu menjalankan git add --renormalize . dan meninjau status yang dihasilkan. Petunjuk pembaruan GitHub
Setelah Anda menyimpan suntingan dengan aman dan menetapkan kebijakan repositori, siapkan (stage) normalisasi dan periksa secara saksama apa yang diusulkan oleh Git:
git add --renormalize .
git status --short
git diff --cached --stat
git diff --cached
Jangan langsung melakukan commit secara otomatis. Tinjau staged diff, terutama untuk file biner atau file terbuat (generated) yang tidak terduga. Jika masih menampilkan perubahan konten yang tidak Anda maksudkan, hentikan dan periksa jalur yang terpengaruh beserta nilai attr/-nya dengan git ls-files --eol; perbaiki kebijakan atribut sebelum melakukan staging kembali. Normalisasi ulang dapat menghasilkan diff sah yang besar jika repositori sebelumnya menyimpan akhiran yang tidak konsisten, jadi koordinasikan commit normalisasi dengan kolaborator jika diperlukan.
Jika file tetap berstatus dimodifikasi
Line ending hanyalah salah satu penyebab yang mungkin. Cari perbedaan substantif pada diff yang berada di staging maupun tidak, periksa apakah editor menulis ulang file, dan periksa filter atau atribut khusus file. Jika git ls-files --eol melaporkan i/lf dan w/crlf, konfirmasikan apakah ada atribut atau pengaturan yang sengaja meminta CRLF. Jika dilaporkan mixed, identifikasi file mana yang memiliki akhiran bercampur dan apakah file tersebut berupa teks sebelum menormalisasinya. Pemeriksaan keamanan Git dapat memperingatkan tentang konversi yang tidak dapat dipulihkan, tetapi tidak dapat mengetahui apakah suatu file salah diklasifikasikan sebagai teks. Referensi konfigurasi Git
Urutan praktisnya adalah: amankan suntingan, periksa core.autocrlf dan git ls-files --eol, pilih kebijakan proyek yang konsisten, lalu normalisasi ulang dan tinjau diff-nya. Hal ini mengatasi gangguan line ending sembari tetap menjaga kendali Anda atas setiap perubahan konten yang sebenarnya.
Sumber
Configuring Git to handle line endings — GitHub Docs