Abaikan perubahan spasi putih pada semua perintah git

26

Saya telah menemukan banyak situs yang menjelaskan bagaimana git memperingatkan Anda ketika Anda mengubah akhir baris, atau berbagai teknik lainnya untuk mencegah Anda mengacaukan seluruh file. Anggap sudah terlambat untuk itu - pohon sudah memiliki komitmen yang beralih akhir baris file, jadi git difftunjukkan pengurangan dari file lama diikuti dengan penambahan file baru dengan konten yang sama

Saya mencari opsi konfigurasi git atau flag command-line yang memberitahu diffuntuk mengabaikannya - jika dua baris hanya berbeda oleh spasi, berpura-puralah mereka sama. Aku membutuhkan pilihan konfigurasi ini / bendera untuk bekerja untuk apa pun yang bergantung pada perbedaan file - diff, blame, bahkan merge/ rebaseidealnya - Saya ingin gitbenar-benar mengabaikan trailing spasi, terutama akhir baris. Bagaimana saya bisa melakukan itu?

Michael Mrozek
sumber

Jawaban:

14

Untuk beda, ada git diff --ignore-space-at-eol, yang seharusnya cukup bagus. Untuk perbedaan dan kesalahan, Anda dapat mengabaikan semua perubahan spasi putih dengan -w: git diff -w, git blame -w.

Untuk git applydan git rebase, dokumentasi menyebutkan --ignore-whitespace.

Untuk penggabungan, sepertinya Anda perlu menggunakan alat penggabungan eksternal. Anda dapat menggunakan skrip pembungkus ini (belum diuji), di mana alat penggabungfavorite-mergetool favorit Anda ; lari . Hasil penggabungan akan dalam format unix; jika Anda lebih suka format lain, konversikan semuanya ke format berbeda, atau konversikan setelah penggabungan.git -c mergetool.nocr.cmd=/path/to/wrapper/script merge$MERGED

#!/bin/sh
set -e
TEMP=$(mktemp)
tr -d '\013' <"$BASE" >"$TEMP"
mv -f "$TEMP" "$BASE"
TEMP=$(mktemp)
tr -d '\013' <"$LOCAL" >"$TEMP"
mv -f "$TEMP" "$LOCAL"
TEMP=$(mktemp)
tr -d '\013' <"$REMOTE" >"$TEMP"
mv -f "$TEMP" "$REMOTE"
favorite-mergetool "$@"

Untuk meminimalkan masalah dengan akhiran garis campuran, pastikan file teks dinyatakan seperti itu .

Lihat juga Apakah mungkin bagi git-merge untuk mengabaikan perbedaan akhir baris? pada Stack Overflow.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Apakah ada konfigurasi untuk selalu menggunakan flag -w dengan menyalahkan git?
Thayne
@Thayne Bukan yang saya tahu. Anda dapat mendefinisikan alias seperti bl = blame -wtetapi Anda tidak dapat mendefinisikan kembali nama perintah bawaan dan saya tidak melihat opsi konfigurasi untuk menjadikannya default. Tapi saya bukan ahli git.
Gilles 'SO- stop being evil'
untuk git status?
Ejaz