Làm thế nào để làm cho nhật ký git không được nhắc tiếp tục?


92

Tôi có một vài kho lưu trữ git thuộc về nhau và tệp batch / bash đơn giản để lặp qua chúng. Tôi thường lặp lại chúng bằng lệnh nhật ký để nhanh chóng xem chúng đang ở trạng thái nào. Điều này hoạt động tốt, ngoại trừ một điều: nếu thông báo cam kết dài hơn số ký tự mà bảng điều khiển của tôi rộng (hoặc có nhiều dòng), git hiển thị dòng, sau đó là dòng mới với (END) và tôi phải nhấn q để tiếp tục (tôi đoán nó dẫn đầu ra thông qua nhiều hơn hoặc tương tự như vậy). Thí dụ:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

Điều này khá bất tiện vì tôi phải nhấn q một vài lần, trong khi tôi chỉ muốn xem tất cả những oneliners đó cùng một lúc.

Làm cách nào để vô hiệu hóa hành vi này (tốt hơn là vẫn giữ định dạng nhật ký này)?


Câu trả lời:


154

Git có một tùy chọn để tắt máy nhắn tin:

git --no-pager log --decorate=short --pretty=oneline -n1

Nếu máy nhắn tin của bạn cắt dòng và bạn muốn giữ lại hành vi đó, hãy chuyển đến cut...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

... hoặc đặt biến môi trường GIT_PAGERtrước lời gọi:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1

Có cách nào để đặt --no-pagermặc định hoặc thậm chí tốt hơn ở một phím tắt cho tùy chọn này khi cần thiết không? Tôi nghĩ răng cưa gitnpđể git --no-pager, nhưng tôi nghĩ rằng có một giải pháp tốt hơn.
Islam Azab

1
@IslamAzab, bạn có thể đặt bí danh gitđể /usr/bin/git --no-pagertắt máy nhắn tin cho tất cả các cuộc gọi git của bạn.
mrkmg

1
@WarrenP gitkhông tích hợp sẵn máy nhắn tin. Thay vào đó, nó tuân theo triết lý Unix và sử dụng bất cứ thứ gì bạn có trong đó $PAGER. gitchỉ đơn giản là luôn sử dụng $PAGERthay vì làm điều đó chỉ ngẫu nhiên không giống như nhiều công cụ được viết kém khác. Sự kỳ diệu chỉ gitcó là nếu $LESSđang không được định nghĩa , nó sẽ xác định $LESSgiá trị FRX. Xem xung quanh github.com/git/git/blob/master/Documentation/config.txt#L766 để biết thêm chi tiết.
Mikko Rantalainen

@WarrenP gitchỉ cung cấp một ghi đè GIT_PAGER cho phép bạn xác định giá trị tùy chỉnh sẽ được sử dụng thay vì PAGERbất cứ khi nào git cần phân trang.
Mikko Rantalainen

1
Trường hợp đơn giản nhất mà các bản sửa lỗi hành vi chỉ cho git: xuất khẩu GIT_PAGER = mèo
Stragulus

16

Một giải pháp khác cho vấn đề vô hiệu hóa vĩnh viễn máy nhắn tin cụ thể khi sử dụng loglệnh con:

  • chỉ dành cho repo hiện tại:
    git config pager.log false

  • cho cài đặt git của bạn (tức là tất cả các repo trên máy của bạn):
    git config --global pager.log false

Như bạn có thể đoán, điều tương tự cũng hoạt động nếu cần bật hoặc tắt máy nhắn tin cho một số lệnh con khác một cách chọn lọc. Ví dụ. lệnh con for (in các nhánh) nó sẽ là
branch

git config pager.branch false


Giải pháp được đề xuất được cho là thanh lịch hơn so với

  • sử dụng git --no-pagermỗi khi bạn chạy lệnh nhất định.
    Bởi vì, hoàn toàn có thể, bạn không muốn gõ nó mỗi lần.

  • chỉ định git --no-pagerlàm bí danh cho git
    Bởi vì, hoàn toàn có thể, bạn muốn tránh cấu hình toàn cục ngầm HOẶC bạn muốn bật máy nhắn tin trong một số trường hợp.

  • dựa vào một số biến môi trường như PAGERhoặc GIT_PAGER.
    Vì để làm được điều đó, bạn cần đảm bảo chúng được đặt trong phiên đầu cuối hiện tại của bạn. Và, nếu bạn muốn chúng được tự động đặt thành một số giá trị tùy chỉnh mỗi khi thiết bị đầu cuối mới của bạn được tạo, bạn cần phải thay đổi một trong các tệp shell-bootstrapped như vd ~/.bashrc. Nó không phải là một vấn đề lớn. Nhưng các tệp tin khởi động này thường xuyên bị thay đổi bởi các ứng dụng khác và chứa nhiều thứ khác, không chỉ được sử dụng bởi Git. Vì vậy, về lý thuyết, tốt hơn là chỉ định các cài đặt liên quan đến git bằng cách sử dụng git configthay vì đặt chúng vào ví dụ ~/.bashrc.


Giải pháp thay thế cho việc vô hiệu hóa pagercho tất cả các lệnh con là để xác định catnhư git tiện ích sẽ sử dụng cho phân trang:

  • git config core.pager cat HOẶC LÀ
  • git config --global core.pager cat

Câu trả lời của tôi phần nào diễn đạt lại câu dưới đây:
"ngăn git khác với sử dụng máy nhắn tin?"
https://stackoverflow.com/a/6986231/6103242

Nó được tham chiếu để chỉ ra một cuộc thảo luận có liên quan khác.


3

Tắt máy nhắn tin cho tất cả các lệnh:

git config --global core.pager '' 

2

Bạn chuyển nó xuống dưới -F trong trường hợp --no-pager không hoạt động với bạn.

git log --decorate --oneline -5 | less -F
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.