阻止 Git 子模組 foreach 為每個模組開啟 less

阻止 Git 子模組 foreach 為每個模組開啟 less

我偶爾需要透過我使用的 git 子模組進行 grep:

git submodule foreach 'git grep x'

但是,自從切換到 zsh 後,我發現每個子模組都會打開較少的提示,即使沒有選項也是如此。我更喜歡將所有輸出列印到終端。

我目前的解決方案是調用:

git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a

這實現了我想要的,但我忍不住覺得我錯過了一個選項或更優雅的解決方案。有嗎?

答案1

嘗試更改 git 使用的分頁器:

GIT_PAGER="cat" git submodule foreach 'git grep x'

或者,如果您希望減少使用,但僅當輸出將超出螢幕時:

GIT_PAGER="less -FX" git submodule foreach 'git grep x'

您可以使用 設定每個項目的分頁器git config,當然也可以全域設定環境變數。

答案2

只是為了涵蓋其他方法:

方法#1:--nopager

git submodule foreach 'git --nopager grep x'

方法#2:完全停用尋呼機

git config --global core.pager cat

從 git-config 手冊頁:

core.pager git 將用來對輸出進行分頁的命令。可以使用 GIT_PAGER 環境變數覆蓋。請注意,如果在執行分頁程式時未設定 LESS 環境變量,則 git 會將其設為 FRSX。可以透過將 LESS 變數設為其他值來變更這些設定。或者,可以透過設定 core.pager 選項在項目或全域基礎上覆蓋這些設定。設定 core.pager 對上面的 LESS 環境變數行為沒有影響,所以如果你想以這種方式覆蓋 git 的預設設置,你需要明確。例如,若要以向後相容的方式停用 S 選項,請將 core.pager 設定為 less -+S。這將由 git 傳遞到 shell,它將最終命令轉換為 LESS=FRSX less -+S。

方法#3:pager.<cmd>

您也可以使用 pager 停用單一 git 子指令的分頁。設定而不是 core.pager 並且您可以更改每個 git 儲存庫的設定(省略 --global)。

git config --global pager.grep cat

從 git-config 手冊頁:

呼叫器.如果值為布林值,則在寫入 tty 時開啟或關閉特定 git 子命令的輸出分頁。否則,使用 pager 值指定的分頁器為子命令開啟分頁。若要停用所有指令的分頁,請將 core.pager 或 GIT_PAGER 設定為 cat。

方法#4:修改 less 的行為 ( -F -X)

您可以重新配置 less,使其「有條件地」僅對內容大於螢幕大小的檔案進行分頁 ( -F),並停用 less 稍後清除螢幕 ( X)。

git config --global core.pager less -F -X

參考

答案3

在這種情況下,我曾經重新分頁整個命令

git submodule ... | less

但我們丟失了子命令的任何潛在格式。

然後我意識到我們對「git status」有同樣的問題,所以在閱讀了「git status」的答案後如何開啟尋呼機輸出 git status?“ 我會建議

git config --global pager.submodule "less -FX"

相關內容