Bỏ qua thay đổi khoảng trắng trong tất cả các lệnh git


26

Tôi đã tìm thấy vô số trang web giải thích làm thế nào để git cảnh báo bạn khi bạn thay đổi kết thúc dòng hoặc các kỹ thuật khác để ngăn bạn làm hỏng toàn bộ tệp. Giả sử đã quá muộn cho điều đó - cây đã cam kết chuyển đổi kết thúc dòng của các tệp, do đó git diffhiển thị phép trừ của tệp cũ theo sau là thêm một tệp mới có cùng nội dung

Tôi đang tìm kiếm một tùy chọn cấu hình git hoặc cờ dòng lệnh diffđể bỏ qua những thứ đó - nếu hai dòng chỉ khác nhau bởi khoảng trắng, giả vờ chúng giống nhau. Tôi cần cái này tùy chọn config / cờ để làm việc cho bất cứ điều gì mà dựa vào sự khác biệt tập tin - diff, blame, thậm chí merge/ rebaselý tưởng - Tôi muốn gitđể hoàn toàn bỏ qua dấu khoảng trắng, đặc biệt là kết thúc dòng. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


14

Đối với diff, có git diff --ignore-space-at-eol, đó là đủ tốt. Đối với khác biệt và đổ lỗi, bạn có thể bỏ qua tất cả các thay đổi khoảng trắng với -w: git diff -w, git blame -w.

Đối với git applygit rebase, các tài liệu đề cập --ignore-whitespace.

Để hợp nhất, có vẻ như bạn cần sử dụng một công cụ hợp nhất bên ngoài. Bạn có thể sử dụng tập lệnh bao bọc này (chưa được kiểm tra), công cụ hợp nhấtfavorite-mergetool yêu thích của bạn ở đâu ; chạy . Kết quả của việc hợp nhất sẽ ở định dạng unix; nếu bạn thích định dạng khác, hãy chuyển đổi mọi thứ sang định dạng khác hoặc chuyển đổi sau khi hợp nhất.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 "$@"

Để giảm thiểu rắc rối với các kết thúc dòng hỗn hợp, hãy đảm bảo các tệp văn bản được khai báo như vậy .

Xem thêm Có thể cho phép hợp nhất git để bỏ qua sự khác biệt kết thúc dòng? trên Stack Overflow.


Có cấu hình nào để luôn sử dụng cờ -w với lỗi git không?
Thayne

@Thayne Không phải tôi biết. Bạn có thể định nghĩa một bí danh như thế bl = blame -wnhưng bạn không thể xác định lại tên của các lệnh tích hợp và tôi không thấy tùy chọn cấu hình để biến nó thành mặc định. Nhưng tôi không phải là một chuyên gia git.
Gilles 'SO- ngừng trở nên xấu xa'

cho git status?
Ejaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.