Tại sao ít được chạy không cần thiết bởi git?


22

Khi tôi chạy git branch(từ bash hoặc csh), nó tự động dẫn đầu ra qua less. Tuy nhiên, chỉ với một vài chi nhánh trong kho lưu trữ, điều này vượt quá mức không cần thiết, thật khó chịu, vì danh sách chi nhánh biến mất một khi tôi bỏ ít hơn.

Kiểm tra ~/.gitconfigtệp và các .git/configtệp cục bộ không tìm thấy gì về máy nhắn tin hoặc bất kỳ thứ gì khác có thể gây ra điều này. Mặt khác, không có gì tôi tìm thấy trong các tìm kiếm trên web là hữu ích hoặc đầy hứa hẹn.

Tại sao điều này xảy ra và tôi có thể làm gì để lesschạy khi cần thiết (ví dụ: khi thực hiện git logkhi có nhiều lịch sử) nhưng không phải (như git branchchỉ có 2 hoặc 3 nhánh)?


4
Nói chung, git không biết sẽ có bao nhiêu đầu ra từ bất kỳ lệnh nào, do đó, nó sẽ gửi mọi thứ theo mặc định thông qua một máy nhắn tin, có lẽ sẽ ít hơn.
icarus

6
Điều đầu tiên làm trong quá trình cài đặt -nix mới là đưa export LESS=-Xvào .profile. Điều này giữ cho ít "làm sạch" màn hình. Tôi ghét rằng cài đặt tiêu chuẩn sẽ xóa màn hình vì tôi thường cần phải cắt và dán công cụ hoặc sử dụng nó làm tài liệu tham khảo.
Peter - Tái lập Monica

3
@Peter Để rõ ràng (không có ý định chơi chữ), chỉ những người không muốn hành vi xóa màn hình mới làm điều đó.
David Z

@icarus: Điều đó có vẻ hợp lý. Tuy nhiên, hành vi của tôi đã thay đổi gần đây. Tôi không chắc tại sao - có lẽ là một sự thay đổi đối với một số biến môi trường bắt buộc từ những người bảo mật của công ty "ở trên cao", những người dường như không quan tâm đến việc họ làm những công việc khác khó khăn như thế nào. Dù sao, git đột nhiên chuyển từ những gì tôi cho là hành vi hợp lý sang chạy các đầu ra dòng đơn thông qua ít hơn theo cách mà đầu ra bị mất khi tôi dừng ít hơn.
GreenMatt

Nếu hành vi gần đây đã thay đổi thì ít nhất có thể một cài đặt của biến LESS đã được thêm vào các tệp khởi động hệ vỏ toàn hệ thống, ví dụ / etc / profile, /etc/profile.d/*, /etc/bash.bashrc, Bạn có biến này trong môi trường của bạn?
icarus

Câu trả lời:


35

Bạn có thể thiết lập như sau:

git config --global core.pager 'less -FRX'

Điều này sẽ đảm bảo rằng lesssẽ

  • Thoát nếu toàn bộ tập tin có thể được hiển thị trên màn hình đầu tiên ( F)
  • Xuất các ký tự điều khiển thô cho định dạng đầu cuối ( R)
  • Cắt dài dòng ( S)
  • Không gửi chuỗi init / de-init đến thiết bị đầu cuối - tránh xóa màn hình khi thoát ( X)

Chỉnh sửa: Đã xóa Stùy chọn dựa trên nhận xét của Peter A. Scheider


7
và bỏ qua --globalnếu bạn muốn nó chỉ áp dụng cho kho lưu trữ hiện tại.
mosvy

8
Đặt biến môi trường LESSthành -FR, thêm vào X và S để nếm thử là một cách khác.
icarus


11
Nhiều khả năng OP thấy rằng hành vi gây phiền nhiễu nói chung; Tôi cho rằng người ta có thể đặt biến môi trường export PAGER='less -FRSX'và git sẽ tôn trọng nó (không có cấu hình git cụ thể). Btw, -Slà nguy hiểm vì nó âm thầm loại bỏ đầu ra.
Peter - Tái lập Monica

4

Có một số câu trả lời tuyệt vời ở đây để điều chỉnh lesshành vi của nó, nhưng vì các ngón tay xám của tôi đã quen với việc gõ |morekhi tôi muốn, và vì tôi vẫn còn đồng điệu với đồng bóng hơn là với git, tôi rất thích

git config --global core.pager cat

3
Trang man cho git-configbiết giá trị của core.pagerdự định sẽ được giải thích bởi shell. Khi bạn đặt nó no, nó sẽ cố thực thi lệnh no, rất có thể không tồn tại, sau đó nó sẽ quay trở lại chỉ đơn giản là xuất nội dung. Bạn vẫn sẽ thấy một thông báo lỗi ở đầu. Những gì bạn có thể muốn làm là đặt nó để catthay thế.
QIS

1
Đó là một thông tin tốt, nhưng điều tôi thích là nó không thực thi bất cứ điều gì . Điều catnày là vô ích, và tôi không đặc biệt tin tưởng các nhà bảo trì Linux không thay đổi những gì con mèo làm (xem phần lstrích dẫn các tập tin được trích dẫn ). Có lẽ tôi nên sử dụng "đừng bao giờ" thay thế. Nó ít có khả năng là một chương trình như vậy tồn tại.
dgc

7
Đặt core.pagerthành chuỗi trống ( git config core.pager '') hoặc catsẽ không chạy gì cả. Bạn có thể tự mình giải quyết nếu bạn không tin tôi ;-) Không có lý do gì để đặt nó thành một lệnh giả như thế nào no.
mosvy

Cảm ơn rất nhiều! Tôi không biết chuỗi rỗng sẽ không thực hiện lệnh. Như catbạn đang nói rằng git có một trường hợp đặc biệt cho chuỗi đó trong mã máy nhắn tin - tức là đó thực sự catlà một từ đồng nghĩa với "null"? Tôi hy vọng nó sẽ thực thi cat.
dgc

Điều này thực sự có vẻ là trường hợp. Egads. Nhưng cũng tốt: Tôi luôn tìm kiếm nhiều cách hơn để biện minh cho sự chán ghét của mình đối với git.
dgc
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.