Gitサブモジュールforeachが各モジュールに対して開かないようにする

Gitサブモジュールforeachが各モジュールに対して開かないようにする

時々私が使用する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によってシェルに渡され、最終コマンドをLESS = FRSX less - + Sに変換します。

方法#3:pager.<cmd>

また、ページャを使用して個々のgitサブコマンドのページングを無効にすることもできます。 core.pagerの代わりに設定を使用し、gitリポジトリごとに設定を変更できます(-global省略)。

git config --global pager.grep cat

git-configのマニュアルページから:

携帯用小型無線ポケットベル。この値がブールの場合、ttyに書き込むときに特定のgitサブコマンドの出力ページングをオンまたはオフにします。それ以外の場合は、ポケットベル値で指定されたポケットベルを使用して、サブコマンドに対してコールがオンになります。 --paginate または --no-pager がコマンドラインで指定されている場合、このオプションを上書きします。すべてのコマンドのページングを無効にするには、core.pagerまたはGIT_PAGERをcatに設定します。

-F -X方法 #4: less( ) の動作を修正

Lessを画面サイズより大きいコンテンツを持つファイルのみを「条件付き」ページに再構成し(-F)、後で画面を消去しないようにLessを無効にできます(X)。

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

引用する

答え3

この場合、コマンド全体を再ページしました。

git submodule ... | less

ただし、サブコマンドの潜在的な形式は失われます。

それから「git status」に同じ問題があることに気づいたので、「git status」の答えを読んだ後git状態を出力するためにポケットベルを開く方法は?「お勧めしたい

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

関連情報