是否有一個命令行開關傳遞給git diff
以及默認使用less
傳呼機的其他命令?如何防止使用尋呼機的git diff?
我知道我可以管它給貓,但是這會刪除所有的語法高亮。
我知道我可以通過GITPAGER=cat
(或類似的東西)設置的尋呼機在全球的.gitconfig貓;但我想有時傳呼機(取決於diff的大小)。
但是,我更喜歡命令行開關,如果有的話;我無法找到一個,通過手冊頁。
是否有一個命令行開關傳遞給git diff
以及默認使用less
傳呼機的其他命令?如何防止使用尋呼機的git diff?
我知道我可以管它給貓,但是這會刪除所有的語法高亮。
我知道我可以通過GITPAGER=cat
(或類似的東西)設置的尋呼機在全球的.gitconfig貓;但我想有時傳呼機(取決於diff的大小)。
但是,我更喜歡命令行開關,如果有的話;我無法找到一個,通過手冊頁。
--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
謝謝,我想我可以將git --no-pager別名爲.bashrc中的gitc,對吧? – 2010-02-02 12:50:55
我不明白爲什麼不。我不知道如果用於一個根本不需要尋呼機的謂詞,它會如何反應。 – 2010-02-02 12:53:14
或使用GIT_PAGER或PAGER環境變量或'core.pager' git配置變量。 – 2010-02-02 14:43:06
使用
git config --global core.pager cat
獲得對所有庫中的所有命令擺脫尋呼機。
您還可以通過使用pager.<cmd>
設置而不是core.pager
,你可以改變每git倉庫的設置(省略--global
)禁用分頁單git的子命令。
見man git-config
和搜索pager.<cmd>
瞭解詳情。
問題不在於如何完全禁用尋呼機,而是如何爲grep子命令禁用它。 mtahmed的答案是完美的。 – TilmanBaumann 2014-10-06 12:46:33
這可能是什麼擴展的解釋問,但這是我一直在尋找的,這是谷歌的最好結果之一,所以謝謝@geekQ – 2015-12-30 13:57:49
關於禁用顏色時管道:
使用--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
請注意,git將設置'LESS'環境變量爲'FRSX'時調用尋呼機,如果未設置。 – tobbez 2012-09-27 15:42:48
如前所述前面的回答,傳遞-F
選項較少導致其退出,如果含量小於一個屏幕,但是之後這樣做屏幕重置,你最終沒有看到內容,-X
選項會消除該行爲。所以,我用下面的基於內容的數量,使有條件的分頁:
git config --global --replace-all core.pager "less -F -X"
注意:我不得不在'git'1.8.0.2'中使用'git config --global --add core.pager'less -F -X「',上面的那個不起作用。 – Dogbert 2013-01-31 07:23:43
太棒了!另外,爲了使它不僅適用於git,而且所有程序都會在''.bashrc'或'.zshrc'中添加'export LESS =「 - RFX」'' – defhlt 2014-10-13 19:07:33
謝謝!我一直困擾着git會從輸出中截斷第一行的選項,然後失去同步,使得沿着一條線然後向上一條線會導致正確的第一行佔據頂部,接着是正確輸出的第三行。無論如何,指定這個選項解決了這個問題。太離奇了。 – 2015-01-26 20:40:34
最近文檔中的變化更不用說消除對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 comments和his 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.pager
和GIT_PAGER
沒有給予優先的大局。從git var
(1)文檔借用更好的描述。使用該機制來允許系統範圍,全局和每個存儲庫配置文件不限於此特定變量。刪除它以澄清段落。
重寫說明如何將環境變量
LESS
設置爲Git的默認值以及如何選擇性地對其進行定製的部分。
注:commit b327583(Matthieu Moy moy
,2014年4月,爲git的2.0.x版本/ 2.1,Q3 2014)將在默認情況下刪除S:
Git默認用於設置
$LESS
到-FRSX
如果$LESS
不是由用戶設定。
FRX
flags實際上對Git有意義(F
和X
,因爲有時輸出的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.pager
到less -+F
將停用由來自命令行的環境指定的F
選項,去激活的less
的「quit if one screen
」的行爲。
可以特別激活某些特定命令的標誌:例如,將pager.blame
設置爲less -S
僅啓用git blame
的行截斷。
謝謝,謝謝!我一直在尋找一種方法來讓git停止爲MONTHS排長隊! – CoreDumpError 2014-01-06 20:10:43
@CoreDumpError注意:下一個Git(2.0.X或2.1)不會在默認情況下切成線**!看到我上面編輯的答案。 – VonC 2014-07-27 06:46:40
謝謝。這讓我知道我想要導出LESS =「$ LESS -FRXK」,這樣我就可以通過ctrl-c從較小的值退出而獲得彩色差異。 – 2015-01-27 03:14:11
可以別名有自己的傳呼機與pager.alias添加到差異,像這樣:
[alias]
dc = diff
dsc = diff --staged
[pager]
dc = cat
dsc = cat
這將保持顏色上,當在「調用使用「貓」的尋呼機git dc'。
而且,事情不做:
您可以禁用/啓用對全局配置特定輸出尋呼機以及:
git config --global pager.diff false
或者到core.pager選項設置,只需要提供一個空字符串:
git config --global core.pager ''
正如你所說,這在我看來比將它設置爲cat
更好。
這就是我在Git 1.9上的工作......一切都沒有奏效。 – 2015-08-02 13:19:33
這是爲我工作的那個'git version 2.5.4(Apple Git-61)' – 2016-02-18 14:47:51
這就是我想要的,因爲其他命令完全禁用了尋呼機,但這是唯一的答案,只禁用'git diff'同時讓它爲其他命令工作 – SingleNegationElimination 2017-12-09 21:44:44
這在Linux的工作對我來說與GIT版本2.1.4:
git config --global --replace-all core.pager cat
這使得Git的使用cat
代替less
。 cat
只是將diff
的輸出轉儲到屏幕上,無需分頁。
通常,如果答案包含解釋代碼意圖做什麼的解釋,以及爲什麼解決問題而不介紹其他命令,則答案會更有幫助。 (這篇文章被至少一個用戶標記,大概是因爲他們認爲沒有解釋的答案應該被刪除。) – 2015-04-19 01:20:48
@NathanTuggy我認爲我很清楚,我正在回答所問的問題。看起來像一些用戶喜歡跑來跑去標記簡短的答案的樂趣。我會添加一些文字。 – jcoffland 2015-05-13 23:53:35
對於一個快速和骯髒的劇本我寫的,我就是這麼做的:
PAGER=cat git diff ...
我想禁用分頁不時,當我知道的輸出也不是很長。對於這一點,我找到了一個巧妙的方法使用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
注意:'core.pager'less - + F - + X''是一種更新的方法來刪除這些選項。請參見[我的答案](http://stackoverflow.com/a/18781512/6309)。 – VonC 2013-09-13 08:19:11
「less - + F - + X」是去除長日誌中令人討厭的「......跳過......」標記的魔法設置。非常感謝這些選項,您拯救了我的一天! – 2014-05-12 09:04:36