git logに続行を促さないようにするにはどうすればよいですか?


92

一緒に属するいくつかのgitリポジトリと、それらをループする単純なバッチ/ bashファイルがあります。私はよくlogコマンドでそれらをループして、それらがどのような状態にあるかをすばやく確認します。これは、1つのことを除いて、うまく機能します。コミットメッセージがコンソールの文字数よりも長い場合(または複数行ある場合)、gitはその行を示し、次に(END)を含む改行があり、続行するにはqを押す必要があります(出力をより多くのまたはそのようなものにパイプすると思います)。例:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

これは、qを数回押す必要があるため、かなり不便ですが、これらすべてのワンライナーを一度に表示したいだけです。

この動作を無効にするにはどうすればよいですか(できれば、このログ形式を維持したまま)?


回答:


154

Gitには、ポケットベルを無効にするオプションがあります。

git --no-pager log --decorate=short --pretty=oneline -n1

ポケットベルが線を切り、その動作を維持したい場合は、次のいずれかにパイプしcutます...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

...またはGIT_PAGER呼び出しの前に環境変数を設定します。

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1

--no-pager必要に応じて、このオプションのショートカットをデフォルトまたはさらに改善する方法はありますか?にエイリアシングgitnpするgit --no-pagerことを考えましたが、もっと良い解決策があると思います。
イスラムアザブ2016年

1
@IslamAzab、すべてのgit呼び出しでページャーを無効にするエイリアスgitを作成でき/usr/bin/git --no-pagerます。
mrkmg 2016

1
@WarrenPにgitはポケットベルが組み込まれていません。代わりに、Unix哲学に従い、にあるものをすべて使用します$PAGER。他の多くの不十分に書かれたツールとは異なり、それをランダムに行うのでgit$PAGERなく、単に常に使用します。唯一の魔法gitがあるがあればということです$LESSされて定義されていない、それが定義する$LESS値にFRX。詳細については、github.com / git / git / blob / master / Documentation / config.txt#L766周辺を参照してください。
ミッコランタライネン2017年

@WarrenPgitは、gitがページングを必要とするときではなく、使用するカスタム値を定義できるようにするオーバーライド GIT_PAGERを提供するだけPAGERです。
ミッコランタライネン2017年

1
gitの動作のみを修正する最も単純なケース:export GIT_PAGER = cat
Stragulus 2018年

16

特にサブコマンドを使用するときにページャーを永続的に無効にする問題の別の解決策log

  • 現在のレポのみ:
    git config pager.log false

  • gitインストール(つまり、マシン上のすべてのリポジトリ)の場合:
    git config --global pager.log false

ご想像のとおり、他のサブコマンドでページャーを選択的にオンまたはオフにする必要がある場合も、同じように機能します。
例:for branch(ブランチを出力する)サブコマンドは次のようになります

git config pager.branch false


提案されたソリューションは、間違いなく、

  • git --no-pager特定のコマンドを実行するたびに使用します。
    なぜなら、可能性としては、毎回入力したくないからです。

  • git --no-pagerエイリアスとして指定するgit
    可能性が高いため、暗黙的なグローバル構成を回避するか、ポケットベルが必要です。によってはを有効にし場合があります。

  • PAGERまたはのようないくつかの環境変数に依存しますGIT_PAGER
    そのためには、現在のターミナルセッションで設定されていることを確認する必要があります。また、新しい端末が作成されるたびに自動的にカスタム値に設定する場合は、たとえば、シェルでブートストラップされたファイルの1つを変更する必要があります~/.bashrc。それは大きな問題ではありません。しかし、これらのブートストラップされたファイルは、他のアプリケーションによっても頻繁に変更され、Gitで使用されるものだけでなく、他の多くのものが含まれています。したがって、理論的には、git configたとえばに配置するよりも、を使用してgit関連の設定を指定する方が適切~/.bashrcです。


すべてのサブコマンドを無効にするpagerための代替ソリューションは、ユーティリティgitがページングに使用するものとして指定することです。 cat

  • git config core.pager cat または
  • git config --global core.pager cat

私の答えは、以下の1つをいくらか言い換えています。
「gitdiffがページャーを使用しないようにしますか?」
https://stackoverflow.com/a/6986231/6103242

別の関連する議論を指摘するために参照されます。


3

すべてのコマンドでポケットベルを無効にします。

git config --global core.pager '' 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.