Menggunakan sistem kontrol versi, saya merasa terganggu dengan kebisingan saat perbedaan mengatakan No newline at end of file
.
Jadi saya bertanya-tanya:Bagaimana cara menambahkan baris baru di akhir file untuk menghilangkan pesan tersebut?
Jawaban yang Diterima:
Untuk membersihkan proyek secara rekursif, saya menggunakan oneliner ini:
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Penjelasan:
-
git ls-files -z
daftar file dalam repositori. Dibutuhkan pola opsional sebagai parameter tambahan yang mungkin berguna dalam beberapa kasus jika Anda ingin membatasi operasi ke file/direktori tertentu. Sebagai alternatif, Anda dapat menggunakanfind -print0 ...
atau program serupa untuk membuat daftar file yang terpengaruh – pastikan itu memancarkanNUL
-entri yang dibatasi. -
while IFS= read -rd '' f; do ... done
iterasi melalui entri, dengan aman menangani nama file yang menyertakan spasi dan/atau baris baru. -
tail -c1 < "$f"
membaca karakter terakhir dari sebuah file. -
read -r _
keluar dengan status keluar bukan nol jika baris baru tambahan tidak ada. -
|| echo >> "$f"
menambahkan baris baru ke file jika status keluar dari perintah sebelumnya bukan nol.