Bagaimana cara membuatnya
status git
abaikan perbedaan akhir baris?
Info latar belakang:
Saya menggunakan Windows dan Linux secara acak untuk mengerjakan proyek. Proyek ini ada di Dropbox.
Saya menemukan banyak hal tentang bagaimana membuat git diff mengabaikan akhiran baris. Karena saya menggunakan meld git diff membuka gabungan untuk setiap file. Dan berbaur mengatakan "file identik".
Jadi bagaimana cara menghindarinya. Git seharusnya hanya membuka gabungan untuk file yang diubah. Dan status git seharusnya tidak melaporkan file sebagai diubah jika hanya akhiran file yang berbeda.
EDIT: Penyebab:
Ini terjadi karena pengaturan ini di Windows
core.autocrlf benar
Jadi saya memeriksa copy pekerjaan di Linux dan mengatur core.autocrlf false di Windows.
Alangkah baiknya mengetahui cara membuat status git mengabaikan baris baru yang berbeda.
core.autocrlf
adalah akar masalah di Windows, tetapi juga obatnya di Linux. Masalahnya adalah,autocrlf
bersifat global pada Windows, dan repo tidak memiliki pengaturan itu.git/config
. Dengan menjalankan lokalgit config core.autocrlf true
saya menyingkirkan perubahan palsu pada copy pekerjaan NTFS saya yang dikloning di Windows tetapi diakses di Linux. (sekarang hanya ada perubahan palsu dengan symlink - symlink NTFS BERFUNGSI pada tunggangan fuseblk, tetapi Git melihatnya sebagai modifikasi ...)Jawaban:
Coba tetapkan nilai core.autocrlf seperti ini:
sumber
core.autocrlf true
adalah pengaturan yang berfungsi di CygWin.core.safecrlf false
adalah pengaturan yang berfungsi di git bash atau mingwGunakan .gitattributes sebagai gantinya, dengan pengaturan berikut:
.gitattributes akan ditemukan di direktori yang sama dengan .gitconfig global Anda. Jika .gitattributes tidak ada, tambahkan ke direktori itu. Setelah menambahkan / mengubah .gitattributes Anda harus melakukan hard reset repositori agar berhasil menerapkan perubahan ke file yang ada.
sumber
git status
. Ini benar-benar mengubah cara file diperiksa ke dalam repositori. ref: git-scm.com/docs/gitattributes#_code_text_codeJawaban ini tampaknya relevan karena OP mengacu pada kebutuhan solusi multi-OS. Artikel bantuan Github ini menjelaskan pendekatan yang tersedia untuk menangani garis akhiran lintas OS. Ada pendekatan global dan per repo untuk mengelola akhiran garis lintas-os.
Pendekatan global
Konfigurasikan penanganan ujung baris Git di Linux atau OS X:
Konfigurasi penanganan ujung baris Git di Windows:
Pendekatan per repo:
Di root repo Anda, buat
.gitattributes
file dan tentukan setelan akhir baris untuk file proyek Anda, baris demi baris dalam format berikut: dipath_regex line-ending-settings
manaline-ending-settings
salah satu dari berikut ini:The
text
nilai dapat dikonfigurasi lebih lanjut untuk menginstruksikan Git tentang bagaimana untuk menangani akhir baris untuk file yang cocok:text
- Mengubah akhir baris ke akhir baris asli OS.text eol=crlf
- Mengubah akhiran baris menjadiCRLF
saat checkout.text eol=lf
- Mengubah akhiran baris menjadiLF
saat checkout.text=auto
- Default yang masuk akal yang membiarkan pegangan garis tergantung pada kebijaksanaan Git.Berikut adalah isi dari contoh file .gitattributes:
Lebih lanjut tentang cara menyegarkan repo Anda setelah mengubah pengaturan akhir baris di sini . Tldr:
Dalam beberapa kasus, hanya ini yang perlu dilakukan. Orang lain mungkin perlu menyelesaikan langkah tambahan berikut:
sumber
Masalah terkait perintah git di sistem operasi Windows:
peringatan: LF akan diganti oleh CRLF di ...
File tersebut akan memiliki akhiran baris aslinya di direktori kerja Anda.
Resolusi :
Tidak ada pesan peringatan yang muncul.
sumber
Saya membuat skrip untuk mengabaikan perbedaan akhir baris:
Ini akan menampilkan file yang tidak ditambahkan ke daftar komit dan telah dimodifikasi (setelah mengabaikan perbedaan akhir baris). Anda dapat menambahkan argumen "tambah" untuk menambahkan file tersebut ke komit Anda.
Kode sumber: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Pembaruan :
sumber
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; untuk ini: my @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Saya menggunakan windows dan linux, tetapi solusinya
core.autocrlf true
tidak membantu saya. Aku bahkan tidak berubah setelah itugit checkout <filename>
.Jadi saya menggunakan solusi untuk mengganti
git status
-gitstatus.sh
Saya baru saja membandingkan
md5sum
file dan saudaranya di repositori.Contoh keluaran:
sumber