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 diffcó 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 awkngô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 configcà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 diffsau: trong lessmá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 quit ( -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 diffnvà nhận xét trong đó: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/usiously_scripts/git-diffn.sh
- Nếu bạn
git diffncũng muốn , đó là git diffvớ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 diffcthay 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-colorhoặ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 diffvới dòng 'n'umbers) tối qua, viết git diffclà 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-diffntrong hướng dẫn, git-diffcthay vào đó hãy sử dụng . Điều đó bao gồm trong wgetlệnh quá. Tải xuống và cài đặt git diffcrất dễ dàng: đó chỉ là một vài lệnh.