2010-02-02 290 views
403

是否有一個命令行開關傳遞給git diff以及默認使用less傳呼機的其他命令?如何防止使用尋呼機的git diff?

我知道我可以管它給貓,但是這會刪除所有的語法高亮。

我知道我可以通過GITPAGER=cat(或類似的東西)設置的尋呼機在全球的.gitconfig貓;但我想有時傳呼機(取決於diff的大小)。

但是,我更喜歡命令行開關,如果有的話;我無法找到一個,通過手冊頁。

+10

注意:'core.pager'less - + F - + X''是一種更新的方法來刪除這些選項。請參見[我的答案](http://stackoverflow.com/a/18781512/6309)。 – VonC 2013-09-13 08:19:11

+0

「less - + F - + X」是去除長日誌中令人討厭的「......跳過......」標記的魔法設置。非常感謝這些選項,您拯救了我的一天! – 2014-05-12 09:04:36

回答

442

--no-pager git會告訴它不使用尋呼機。 -F如果輸出適合一個屏幕,則會告訴它不是頁面。

用法:

git --no-pager diff 

從註釋其他選項包括:

# set an evaporating environment variable to use cat for your pager 
GIT_PAGER=cat git diff 

# tell less not to paginate if less than a page 
export LESS='-F -X $LESS' 
# ...then git as usual 
git diff 
+3

謝謝,我想我可以將git --no-pager別名爲.bashrc中的gitc,對吧? – 2010-02-02 12:50:55

+0

我不明白爲什麼不。我不知道如果用於一個根本不需要尋呼機的謂詞,它會如何反應。 – 2010-02-02 12:53:14

+34

或使用GIT_PAGER或PAGER環境變量或'core.pager' git配置變量。 – 2010-02-02 14:43:06

109

使用

git config --global core.pager cat 

獲得對所有庫中的所有命令擺脫尋呼機。

您還可以通過使用pager.<cmd>設置而不是core.pager,你可以改變每git倉庫的設置(省略--global)禁用分頁單git的子命令。

man git-config和搜索pager.<cmd>瞭解詳情。

+0

問題不在於如何完全禁用尋呼機,而是如何爲grep子命令禁用它。 mtahmed的答案是完美的。 – TilmanBaumann 2014-10-06 12:46:33

+3

這可能是什麼擴展的解釋問,但這是我一直在尋找的,這是谷歌的最好結果之一,所以謝謝@geekQ – 2015-12-30 13:57:49

7

關於禁用顏色時管道:

使用--color避免着色被禁用。

git diff --color | less -R

或配置它逼上(如中的.gitconfig):

[color] 
     ui = on 

git diff | less -R

對於非彩色的工具,然後使用:

git diff --no-color | some-primitive-tool

導出e環境變量LESS=-R(例如, .bashrc)中的「少」打開色彩支持默認:

git diff | less

+2

請注意,git將設置'LESS'環境變量爲'FRSX'時調用尋呼機,如果未設置。 – tobbez 2012-09-27 15:42:48

170

如前所述前面的回答,傳遞-F選項較少導致其退出,如果含量小於一個屏幕,但是之後這樣做屏幕重置,你最終沒有看到內容,-X選項會消除該行爲。所以,我用下面的基於內容的數量,使有條件的分頁:

git config --global --replace-all core.pager "less -F -X" 
+36

注意:我不得不在'git'1.8.0.2'中使用'git config --global --add core.pager'less -F -X「',上面的那個不起作用。 – Dogbert 2013-01-31 07:23:43

+3

太棒了!另外,爲了使它不僅適用於git,而且所有程序都會在''.bashrc'或'.zshrc'中添加'export LESS =「 - RFX」'' – defhlt 2014-10-13 19:07:33

+0

謝謝!我一直困擾着git會從輸出中截斷第一行的選項,然後失去同步,使得沿着一條線然後向上一條線會導致正確的第一行佔據頂部,接着是正確輸出的第三行。無論如何,指定這個選項解決了這個問題。太離奇了。 – 2015-01-26 20:40:34

51

最近文檔中的變化更不用說消除對less默認選項(「默認選項」是FRSX)的方式不同。

對於這個問題,這將是(GIT 1.8+)

git config --global --replace-all core.pager 'less -+F -+X' 

例如,Dirk Bester建議in the comments

export LESS="$LESS -FRXK" 

,這樣我會塗有顏色差異與按Ctrl-C退出less

Wilson F提到in the commentshis question在於:

較少支持水平滾動,因此,當線被切掉,少禁用退出-IF-一個屏幕,使得用戶仍然可以滾動文本到左邊看看什麼被切斷了。


這些修改是在git的1.8.x的已經顯現,如 「Always use the pager for git diff」(見註釋)所示。 但是文檔剛被重新編寫(for git 1.8.5 or 1.9, Q4 2013)。

供Git命令(例如'less')使用的文本查看器。
該值旨在由shell解釋。

偏好的順序是:

  • $GIT_PAGER環境變量,
  • 然後core.pager配置,
  • 然後$PAGER
  • 然後在編譯時選擇的缺省(通常是 '少' )。

LESS環境變量未設置,Git的將其設置爲FRSX
(如果LESS環境變量設置,Git不會改變它在所有)。

如果您想有選擇地覆蓋Git的默認設置LESS,您可以將core.pager設置爲例如less -+S
這將通過Git傳遞給shell,它將最終命令轉換爲LESS=FRSX less -+S。環境通知命令設置S選項以削減長行,但命令行將其重置爲默認值以摺疊長行。


新文件措詞背後的原因見commit 97d01f2a

配置:改寫core.pager文件

文提到core.pagerGIT_PAGER沒有給予優先的大局。從git var(1)文檔借用更好的描述。

使用該機制來允許系統範圍,全局和每個存儲庫配置文件不限於此特定變量。刪除它以澄清段落。

重寫說明如何將環境變量LESS設置爲Git的默認值以及如何選擇性地對其進行定製的部分。


注:commit b327583Matthieu Moy moy,2014年4月,爲git的2.0.x版本/ 2.1,Q3 2014)將在默認情況下刪除S:

尋呼機:從$ LESS通過刪除 'S'默認

Git默認用於設置$LESS-FRSX如果$LESS不是由用戶設定。
FRX flags實際上對Git有意義(FX,因爲有時輸出的Git管道更短,而且因爲Git管道顏色輸出,所以R)。
另一方面,S標誌(加長排)與Git無關,並且是用戶偏好的問題。 Git不應該決定用戶更改LESS的默認

更具體地說,S標誌傷害誰尋呼機內審查不可信代碼的用戶,由於補丁看起來像:

-old code; 
+new good code; [... lots of tabs ...] malicious code; 

似乎等同於:

-old code; 
+new good code; 

用戶誰更喜歡舊的行爲仍然可以將$ LESS環境變量明確地設置爲-FRSX,或者將core.pager設置爲'less -S'。

的文件將閱讀:

環境不設置S選項,但在命令行呢,指示少截斷長行。
類似地,設置core.pagerless -+F將停用由來自命令行的環境指定的F選項,去激活的less的「quit if one screen」的行爲。
可以特別激活某些特定命令的標誌:例如,將pager.blame設置爲less -S僅啓用git blame的行截斷。

+2

謝謝,謝謝!我一直在尋找一種方法來讓git停止爲MONTHS排長隊! – CoreDumpError 2014-01-06 20:10:43

+0

@CoreDumpError注意:下一個Git(2.0.X或2.1)不會在默認情況下切成線**!看到我上面編輯的答案。 – VonC 2014-07-27 06:46:40

+2

謝謝。這讓我知道我想要導出LESS =「$ LESS -FRXK」,這樣我就可以通過ctrl-c從較小的值退出而獲得彩色差異。 – 2015-01-27 03:14:11

5

可以別名有自己的傳呼機與pager.alias添加到差異,像這樣:

[alias] 
    dc = diff 
    dsc = diff --staged 
[pager] 
    dc = cat 
    dsc = cat 

這將保持顏色上,當在「調用使用「貓」的尋呼機git dc'。

而且,事情做:

  • 使用--no尋呼機在你的別名。 Git(1.8.5.2,Apple Git-48)會抱怨你正在嘗試修改環境。
  • 使用帶有!sh或!git的shell。這將繞過上面的環境錯誤,但會將您的工作目錄(針對該命令的目的)重置爲頂層git目錄,因此如果您已經在您的子目錄中,則對本地文件的任何引用都將不起作用回購。
24

您可以禁用/啓用對全局配置特定輸出尋呼機以及:

git config --global pager.diff false 

或者到core.pager選項設置,只需要提供一個空字符串:

git config --global core.pager '' 

正如你所說,這在我看來比將它設置爲cat更好。

+0

這就是我在Git 1.9上的工作......一切都沒有奏效。 – 2015-08-02 13:19:33

+0

這是爲我工作的那個'git version 2.5.4(Apple Git-61)' – 2016-02-18 14:47:51

+0

這就是我想要的,因爲其他命令完全禁用了尋呼機,但這是唯一的答案,只禁用'git diff'同時讓它爲其他命令工作 – SingleNegationElimination 2017-12-09 21:44:44

7

這在Linux的工作對我來說與GIT版本2.1.4:

git config --global --replace-all core.pager cat 

這使得Git的使用cat代替lesscat只是將diff的輸出轉儲到屏幕上,無需分頁。

+0

通常,如果答案包含解釋代碼意圖做什麼的解釋,以及爲什麼解決問題而不介紹其他命令,則答案會更有幫助。 (這篇文章被至少一個用戶標記,大概是因爲他們認爲沒有解釋的答案應該被刪除。) – 2015-04-19 01:20:48

+1

@NathanTuggy我認爲我很清楚,我正在回答所問的問題。看起來像一些用戶喜歡跑來跑去標記簡短的答案的樂趣。我會添加一些文字。 – jcoffland 2015-05-13 23:53:35

2

對於一個快速和骯髒的劇本我寫的,我就是這麼做的:

PAGER=cat git diff ... 
2

我想禁用分頁不時,當我知道的輸出也不是很長。對於這一點,我找到了一個巧妙的方法使用Git別名:

git config --global --add alias.n '!git --no-pager' 

或者添加以下的[alias]節〜/的.gitconfig:

n = !git --no-pager 

這意味着您可以使用前綴n到關閉任何git命令的分頁,即:​​

git n diff # Show the diff without pager 
git n log -n 3 # Show the last 3 commits without pager 
git n show v1.1 # Show information about a tag