Cách sử dụng awk
để chỉ hiển thị +
và -
các dòng, tính toán cho bất kỳ định dạng màu hoặc văn bản nào git diff
có thể xuất ra:
Không một câu trả lời nào khác ở đây (bao gồm cả câu trả lời khác của tôi ) sẽ thực hiện chính xác những gì bạn muốn chính xác 100%. Câu trả lời này, tuy nhiên, sẽ. Đây là 1 lớp lót bạn có thể sao chép và dán vào thiết bị đầu cuối của mình. Tôi vừa tạo cho nó nhiều dòng để dễ đọc - bạn có thể sao chép-dán nó theo cùng một cách để tôi cũng có thể đọc được! Nó dựa vào awk
ngôn ngữ lập trình:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
Dưới đây là các tính năng của nó. Tất cả các tính năng này, khi được thực hiện cùng nhau, giải quyết các thiếu sót của mọi câu trả lời khác ở đây:
- Nó xử lý màu VÀ đầu ra không màu. Đó là những gì biểu hiện thường xuyên này làm:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- Nó xử lý TẤT CẢ MÀU SẮC và TẤT CẢ CÁC LỰA CHỌN VĂN BẢN, bao gồm in đậm, in nghiêng, gạch ngang, v.v., mà bạn có thể đặt trong
git config
cài đặt của mình . Đó là lý do tại sao regex ở trên có ;?
và {1,10}
trong đó: nếu nó phát hiện sự bắt đầu của mã định dạng màu hoặc văn bản, nó sẽ khớp với tối đa 10 chuỗi các mã ANSI kết hợp này.
Nó cũng không bao gồm các dòng bắt đầu bằng @@
và từ diff
, như câu trả lời được chấp nhận . Nếu bạn muốn những dòng đó (khá thẳng thắn, tôi nghĩ là hữu ích :)), hãy làm điều này thay vào đó:
git diff --unified=0
hoặc là
git diff -U0
Nó hiển thị đầu ra theo cách chính xác như git diff
sau: trong less
máy nhắn tin có đầu ra màu tùy chọn ( -R
) và chỉ khi văn bản> 1 trang ( -F
) và trong khi giữ lại trang văn bản hiện tại trên màn hình khi bạn q
uit ( -X
) .
Nó cũng có lợi ích là mạnh mẽ và dễ dàng cấu hình vì nó sử dụng ngôn ngữ lập trình awk.
Nếu bạn quan tâm đến việc học awk , đây là một số tài nguyên:
gawk
(GNU awk
) hướng dẫn sử dụng: https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- Nghiên cứu
git diffn
và nhận xét trong đó: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/usiously_scripts/git-diffn.sh
- Nếu bạn
git diffn
cũng muốn , đó là git diff
với số dòng, xem tại đây: Git diff với số dòng (Nhật ký Git với số dòng)
- Một số ví dụ kiểm tra cú pháp "hello world" và cú pháp: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
Như một phần thưởng, tôi cũng gói gọn những thứ ở trên để sử dụng git diffc
, có nghĩa là "git diff để hiển thị CHỈ". Cách sử dụng là giống hệt nhau để git diff
; chỉ sử dụng git diffc
thay thế! Nó hỗ trợ TẤT CẢ các tùy chọn. Màu được BẬT theo mặc định. Để tắt nó, chỉ cần sử dụng git diffc --no-color
hoặc git diffc --color=never
. Xem man git diff
để biết chi tiết.
Vì tôi vừa hoàn thành git diffn
(một công cụ để hiển thị git diff
với dòng 'n'umbers) tối qua, viết git diffc
là chuyện nhỏ. Tôi nghĩ rằng tôi nên làm điều đó ngay bây giờ trong khi kiến thức còn mới mẻ trong đầu.
Cài đặt git diffc
:
Thực hiện theo các hướng dẫn ở cuối câu trả lời này tại đây , ngoại trừ mọi nơi bạn thấy git-diffn
trong hướng dẫn, git-diffc
thay vào đó hãy sử dụng . Điều đó bao gồm trong wget
lệnh quá. Tải xuống và cài đặt git diffc
rất dễ dàng: đó chỉ là một vài lệnh.