「git diff」がポケットベルを使用しないようにするにはどうすればよいですか?


640

渡すコマンドラインスイッチgit diffless、デフォルトでポケットベルを使用する他のコマンドはありますか?

私はそれを猫にパイプすることができることを知っていますが、それは構文の強調表示をすべて削除します。

グローバル.gitconfigのポケットベルをcat by GITPAGER=cat(またはそのようなもの)に設定できることはわかっています。しかし、ときどきポケットベルが必要です(diffのサイズによって異なります)。

ただし、コマンドラインスイッチがある場合はそれを使用します。そして、私はそれを見つけることができず、manページを調べてみました。


16
注:core.pager 'less -+F -+X'これらのオプションを削除する最新の方法です。以下の私の答えを参照しください。
VonC

"less-+ F-+ X"は、長いログの迷惑な "...スキップ..."マーカーを削除する魔法の設定です。これらのオプションを本当にありがとう、あなたは私の日を救った!
ギヨームペロー


使用上の関連の質問を参照してくださいlessgitのと(それが依存異なりlessバージョン):unix.stackexchange.com/questions/107315/...
Pierz

回答:


691

--no-pagerGitは、ポケットベルを使用しないように指示します。オプション-Fを渡すと、less出力が1つの画面に収まる場合にページングしないように指示されます。

使用法:

git --no-pager diff

コメントの他のオプションは次のとおりです。

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

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

3
おかげで、.bashrcでgit --no-pagerをgitcにエイリアスできると思いますよね?
ラクシュマンプラサード

42
または、GIT_PAGERまたはPAGER環境変数、またはcore.pagergit構成変数を使用します。
JakubNarębski、2010

74
「git --no-pager log --format = blah」のよう、コマンドの前に --add-pagerを追加する必要があることに注意してください
Ana Betts

6
また、端末の終了後に画面がクリアされる場合は-Elessオプションを追加して-F使用できるようにする必要があります。
mgalgs

9
--no-pagerエイリアスに含める場合は、コマンドにプレフィックスを付ける必要があります。エラーを回避するには、次のようにエイリアスを作成する必要がありますgit config alias.foo '!git --no-pager foo'。やや混乱しています。単にエイリアスを設定して'--no-pager foo'も機能しません。
ジムスチュワート

272

前述の回答のとおり、-Fオプションをless、コンテンツが1画面未満の場合に終了します。ただし、これを行うと画面がリセットされ、コンテンツが表示されなくなります。

-Xオプションは、その行動を離れません。したがって、私はコンテンツの量に基づいて条件付きページングを有効にするために以下を使用します:

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

46
注:私はgit config --global --add core.pager "less -F -X"git 1.8.0.2で使用する必要がありましたが、上記のものは機能しませんでした。
Dogbert 2013年

7
すごい!また、それはそうではないだけにgitで動作しますが、すべてのプログラムは以下のように何かを追加作るためにexport LESS="-RFX"あなたの.bashrc.zshrc
defhlt

これありがとう; 私はgitが出力の最初の行を切り捨て、次に同期を外して1行下がってから1行上に行くと、正しい行の最初の行が上部を占めるようになるというオプションに悩まされています。正しい出力の3行目が続きます。とにかく、このオプションを指定することでその問題は解決しました。とても奇妙です。
Tim Harper

Git For Windows(Greenwood Softwareのビルドをあまり使用しない)を使用している場合、必要なパラメーターは-E(ソース:greenwoodsoftware.com/less/faq.html#dashe)です。
Gavin Ward

1
はい、私が私の回答で説明したように、ページャーが開始および終了する前後に画面がリセットされないようにしたいと思います。特に、すべてが1つの画面に収まる場合-Xはそうです。気に入らない場合は使用しないでください。この方法で気に入ったのは、コマンドを再度入力しなくても、履歴にある以前のgitコマンドの結果を確認することでgit SHAなどを参照できるためです。それぞれ自分自身に。
ishaaq

169

使用する

git config --global core.pager cat

すべてのリポジトリのすべてのコマンドのポケットベルを取り除くため。

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

詳細についてはman git-config、を参照して検索しpager.<cmd>てください。


問題は、ポケットベルを完全に無効にする方法ではなく、grepサブコマンドで無効にする方法でした。mtahmedの答えは完璧です。
TilmanBaumann 2014年

9
これは拡張された説明が求めたものかもしれませんが、これは私が探していたものであり、Googleの上位の検索結果の1つでした。@ geekQに感謝します
Brian F

70

ドキュメントの最近の変更では、のデフォルトオプションを削除する別の方法が言及されていますless(「デフォルトオプション」はですFRSX)。

この質問の場合、これは(git 1.8+)になります。

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

たとえば、Dirk Bester はコメントで提案しています

export LESS="$LESS -FRXK" 

Ctrl-C終了すると色付きの差分が表示されるようにしlessます。

ウィルソンFコメント彼の質問で次のように述べています

lessは水平スクロールをサポートしているので、行が切り取られた場合、lessはquit-if-one-screenを無効にし、ユーザーがテキストを左にスクロールして切り取られた部分を確認できるようにします。


これらの変更は、「常にページャーを使用するgit diff」に示されているように、git 1.8.xですでに表示されていました(コメントを参照)。しかし、ドキュメントは書き直されました(git 1.8.5または1.9の場合、2013年第4四半期)。

Gitコマンドで使用するテキストビューア(「less」など)。
この値は、シェルによって解釈されることを意図しています。

優先順位は次のとおりです。

  • $GIT_PAGER環境変数、
  • その後 core.pager設定、
  • その後 $PAGER
  • そして、コンパイル時に選択されたデフォルト(通常は「少ない」)。

場合はLESS、環境変数が設定されていない、Gitはそれを設定しますFRSX
(存在する場合LESS環境変数が設定され、Gitがすべてでそれを変更しません)。

のGitのデフォルト設定を選択的にオーバーライドLESSする場合はcore.pager、たとえばに設定できますless -+S
これは、最後のコマンドをに変換するGitによってシェルに渡されLESS=FRSX less -+Sます。環境はコマンドにS長い行をチョップするオプションを設定するように指示しますが、コマンド行はデフォルトにリセットして長い行を折り返します。


新しいドキュメントの文言の背後にある理由については、コミット97d01f2aを参照してください。

config:core.pagerドキュメントを書き直します

本文ではcore.pagerGIT_PAGER優先順位の全体像を述べていない。git var(1)のドキュメントからより良い説明を借りてください。

システム全体、グローバル、およびリポジトリごとの構成ファイルを許可するメカニズムの使用は、この特定の変数に限定されません。段落を明確にするために削除してください。

環境変数LESSがGitのデフォルト値に設定される方法と、それを選択的にカスタマイズする方法を説明する部分を書き換えます。


注:コミットb327583Matthieu Moymoy、2014年4月、git 2.0.x / 2.1、Q3 2014)は、デフォルトでSを削除します。

ポケットベル:デフォルトで$ LESSから 'S'を削除

デフォルトでは、Git はユーザーが設定しなかっ$LESS-FRSX場合$LESSに設定されていました。フラグが実際にGitのために意味をなす(そして時にはより少ないへ出力Gitのパイプが短いため、およびGitのパイプが出力を着色しているため)。 一方、フラグ(長い行を切り取る)はGitとは関係なく、ユーザーの好みの問題です。Gitはユーザーがデフォルトを変更することを決定するべきではありません
FRXFXR
SLESS

より具体的には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 -+FF、コマンドラインから環境によって指定されたオプションが無効になり、の「quit if one screen」動作が無効になりlessます。
特定のコマンドに対していくつかのフラグを具体的にアクティブにすることができます。たとえば、に対してのみ行の切り捨てpager.blameless -S有効にするように設定しますgit blame


2
ありがとうありがとう!私はgitがMONTHSの長い行を切り刻まないようにする方法を探していました!
coredumperror 2014年

@CoreDumpError注:次のGit(2.0.Xまたは2.1)はデフォルトでは行を切りません!上記の編集した回答を参照してください。
VonC、2014

2
ありがとう。これにより、「LESS = "$ LESS -FRXK"」をエクスポートして、ctrl-cで色の付いたdiffをlessから終了したいことがわかります。
Dirk Bester、2015年

@DirkBester興味深い提案。より見やすくするために回答に含めました。
VonC、2015年

1
@WilsonFわかりませんが、それはいい質問のように聞こえます。コメントに埋め込んで、ここに残さずに質問にしてみませんか?
VonC、2015

58

グローバル設定で特定の出力のポケットベルを無効/有効にすることもできます:

git config --global pager.diff false

または、core.pagerオプションを設定するには、空の文字列を指定します。

git config --global core.pager ''

これはcatあなたが言うように設定するよりも私の意見ではより良いです。


これがGit 1.9で私に有効だったものです...他のすべては機能しませんでした。
ジョードンベッドウェル

これは私のために働いたものですgit version 2.5.4 (Apple Git-61)
Ashley Coolman

他のコマンドが完全にページャを無効にするので、これは私が望んでいたものですが、これは唯一の答えである無効だけのためにgit diff他のコマンドのために働いて、それを残しながら
SingleNegationElimination

これを書いている時点で... Windows / PowerShellでは手動で編集して設定の下にcode "$($env:UserProfile)\.gitconfig"追加する必要がありました。答えは私の現在のpowershellセッションで機能しましたが、設定をどこにも保存していないようで、次回の起動時に有効でした。pager = [core]
返金不可返品不可2018

12

配管時の無効色について:

--colorカラーリングが無効になるのを避けるために使用します。

git diff --color | less -R

または、強制的に構成します(例:.gitconfig):

[color]
        ui = on

git diff | less -R

非カラーツールの場合は、次を使用します。

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

環境変数LESS=-R(.bashrcなど)をエクスポートすると、デフォルトで "less"のカラーサポートがオンになります。

git diff | less


2
設定されていない場合、ページャーを呼び出すときにgitがLESS環境変数をFRSXに設定することに注意してください。
tobbez 2012

10

これはLinux上のGitバージョン2.1.4で私のために働きました:

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

これにより、Gitがのcat代わりに使用されますlesscatの出力をdiffページングせずに画面にダンプするだけです。


一般に、コードに意図されていること、および他の人を紹介することなく問題を解決する理由の説明が含まれている場合、回答ははるかに役立ちます。(おそらく、説明なしの回答は削除する必要があると考えたため、この投稿には少なくとも1人のユーザーからフラグが付けられました。)
Nathan Tuggy

3
@NathanTuggy私が尋ねられた質問に答えていることはかなり明確だと思いました。一部のユーザーは楽しみのために短い回答にフラグを付けて走り回るのを好むようです。テキストを追加します。
jcoffland

7

次のように、pager.aliasを使用して独自のポケットベルでdiffにエイリアスを追加できます。

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

これにより、色が維持され、「git dc」で呼び出されたときにポケットベルとして「cat」が使用されます。

また、してはいけないこと:

  • --no-pagerエイリアスで使用します。Git(1.8.5.2、Apple Git-48)は、環境を変更しようとしていることを報告します。
  • !shまたはでシェルを使用します!git。これにより、上記の環境エラーはバイパスされますが、(このコマンドの目的で)作業ディレクトリがトップレベルのGitディレクトリにリセットされるため、すでにローカルディレクトリのサブディレクトリにいる場合、ローカルファイルへの参照は機能しません。リポジトリ。

あなたが後にコミットすることにより、移動したいとき+1この技術は有用ですgit logが、ありませんgit log --oneline。使用pager.log = less -FXR +/^commit.*、特殊なケースながら--onelineとオプションをalias.l1 = log --onelineしてpager.l1 = less -FXR
クラウディオ

6

私は私の中にこの塊を持っています、.gitconfigそしてそれはうまくいくようです(diffとshowの両方で無効になっています):

[pager]
    diff = false
    show = false

5

出力があまり長くないことがわかっているときは、時々ページングを無効にするのが好きです。このため、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 three commits without pager
git n show v1.1 # Show information about a tag

2

私が書いた簡単で汚いスクリプトについては、次のようにしました。

PAGER=cat git diff ...

$GIT_PAGERが設定されている場合、これは機能しません。git --no-pager同じことをしますが、より確実です。
Matthieu Moy

2

man gitで言うように--no-pager、どのコマンドでも使用できます。

私はそれを使います:

git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10

次に、エイリアスを使用して、長いコマンドの使用(および記憶)を回避します。


2

Windowsの場合:

git config --global core.pager ""

これにより、のすべてのページングがオフgitになりgit branchます。


Linuxでも動作します!
rustysys-dev

2

~/.oh-my-zsh/lib/misc.zshファイルでoh-my-zshを使用する場合は、次の行をコメント化します。

env_default 'LESS' '-R'

ねえ、私はOPが永続的なグローバルソリューションではなく、git diffで1回使用するコマンドラインスイッチを望んでいたと思います。また、後でoh-my-zshを更新するのが難しいため、oh-my-zshのソースコードを変更するのがどれほど良いかわかりません。.zshrcファイルにそのデフォルト値を設定することをお勧めします。
KarriRasinmäki19年

1
ありがとう、あなたは正しい。oh-my-zshを使用し、永続的なグローバルソリューションが必要な場合unset LESSは、.zshrcの末尾に追加でき ます。
スローレイン

1

デフォルトでは、gitはポケットベルとしてlessを使用します。最初のページを印刷してからコンテンツをスクロールできるので、私は通常より多くを好みます。

さらに、コンテンツは完了時にコンソールに残ります。これは通常、検索後にコンテンツを何かしたいことが多いので便利です(たとえば、コミッターにメールを送信して、前回のコミットでバグが発生したことを伝えます)。

その後、コンテンツをパイプ処理したい場合、スクロールしてすべてを印刷するのは不便です。もっと良い点は、それをパイプラインと組み合わせることができ、すべてをパイプすることです。

# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'

完了時にコンテンツをコンソールに残したくない場合を除いて、基本的に必要なものはそれだけです。代わりにmoreを使用するには、次のようにします。

git config --global core.pager 'more'


0

以下の指示に従ってください。

  1. vi ~/.gitconfig端末に入力するだけです。
  2. LESS="-F -X $LESS"行を貼り付けます。
  3. 押し:wqて入力します。
  4. 端末を再起動します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.