Gitブランチコマンドが「少ない」ように動作する


415

git branchコマンドを使用してすべてのブランチを一覧表示すると、の出力が表示されgit branch | lessます。

コマンドgit branchls、ファイルの場合と同様に、ブランチのリストを表示することになっています。

これは私が得る出力です:

ここに画像の説明を入力してください

のデフォルトの動作を取得するにはどうすればよいgit branchですか?ページ出力の原因は何ですか?

私はZSHをoh_my_zsh(Gitには何もありません)を使用しており、.gitconfig次のようになります。

[user]
  email = myemail@mail.com
  name = Dennis Haegler
[push]
  default = simple
[merge]
   tool = vimdiff
[core]
  editor = nvim
  excludesfile = /Users/dennish/.gitignore_global
[color]
  ui = true
[alias]
  br = branch
  ci = commit -v
  cam = commit -am
  co = checkout
  df = diff
  st = status
  sa = stash
  mt = mergetool
  cp = cherry-pick
  pl = pull --rebase
[difftool "sourcetree"]
  cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
  cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh 
  \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
  trustExitCode = true

回答:


738

Mark Adelsbergerの回答へのコメントで述べたように、これはGit 2.16で導入されたデフォルトの動作変更です。

config設定をgit branch使用すると、デフォルトでページ出力をオフに戻すことができpager.branchます

git config --global pager.branch false

127
それはデフォルトを作るという奇妙な、奇妙な決定です。私のunix-yのcliツールは、必要に応じてチェーンできる単純なプログラムのように動作することを期待していますが、別のサイトでの議論だと思います。
Stragulus

7
@Stragulus新しいデフォルトでは、git branch他のものとの連鎖が妨げられないことに注意してください。使用してパイプ検出コマンド内stdoutに、Gitの意志出力ブランチリストをgit branch > branches.txtgit branch | wc -l
Rory O'Kane

3
@ RoryO'Kaneですが、ポケットベルを使用してESC/q、簡単なgit branchチェックの後にタイプを追加しました。
mitnk 2018年

23
@mitnk必ずしもそうではありません。あなたのページャである場合はless、あなたが追加することができ--no-init --quit-if-one-screen、あなたにLESS原因となり、環境変数、lessテキストがスクロールせずに見ることができるならばstdoutにだけ書き込みに。詳細についてはman less、を参照してください。
ロリーO'Kane

13
手動で設定ファイルに追加したい場合は、[pager] branch = false(2行で)行います。
サム

56

他の回答が指摘しているように、Git lessはほとんどのコマンドでデフォルトで自分自身をページャー(デフォルト)にパイプします。

ただし、重要な点は、LESS環境変数が設定されていない場合、GitがそれをFRX設定し、その結果、ユーザーに表示される動作は、コマンドの出力が短いときにページャーが使用されなかった場合と同じになることです(つまり、ブランチが少ない場合)。参照少ない男を

-Fまたは--quit-if-one-screen
ファイル全体を最初の画面に表示できる場合、lessを自動的に終了させます。

-Rまたは--RAW-CONTROL-CHARS
[...] ANSI "カラー"エスケープシーケンスは "未加工"形式で出力されます。

-Xまたは--no-init
端末へのtermcap初期化および非初期化文字列の送信を無効にします。これは、画面のクリアなど、非初期化文字列が不必要なことを行う場合に望ましいことがあります。

説明した動作が得られた場合は、おそらく$LESS別の設定にしており、それを設定解除(unset LESS)すると、「ページャー」の動作を長い出力で維持しながら問題を取り除くことができます。または、$LESSこれを.gitconfigファイルに追加することにより、現状を維持しながら動作をアクティブ化できます。

[core]
    pager = less -FRX

ページャーのことを本当に嫌う場合は、グローバルに、またはコマンドごとに非アクティブ化できます(他の回答を参照)。


40

セマンティクスを主張、しかし、あなたが取得している行動はしないデフォルト。だから、何か違うものを求めないときにそれを得るのです。デフォルトでは、branch(および他の多数のGitコマンド)、端末に出力を送信するときにポケットベルを使用します。

次の--no-pagerオプションを使用して、このデフォルトを上書きできます。

git --no-pager branch

または、出力をファイルにリダイレクトする場合、Gitは出力が端末に書き込まれていないことを検出するため、ポケットベルを使用しないでください。(一方で、それはあなたのような配管のコマンドを使用して検討する必要があり、その場合には、スクリプトを使用する場合、示唆git for-each-refに優先してをgit branch。)


git --no-pager branch動作します。しかし、これはどうですか?PAGER環境変数のみがに設定されていlessます。これはデフォルトの動作ではありません。私のすべてのカレッジには、ターミナルに出力されるリストとしての出力があります。
DenniJensen

どのバージョンのgitを使用していますか?そして、あなたの同僚はどちらを使用していますか?
Lasse V. Karlsen、

2.16.0!これは、このバージョンでgitに導入された機能ですか?
DenniJensen

ええ、今はデフォルトです。github.com/git/git/blob/master/Documentation/RelNotes/… 同じバージョンを使用している私の隣の大学にはこの問題はありません:) thx @mark
DenniJensen

1
これは、ここで最も優れた答えです。残念ながら、スクロールしてスクロールしてこの傑作を見つけたので、賛成票がほとんどありません。
codepleb

26

このGitの動作も私にとってますます煩わしくなりました。lessたとえばタグをリストしたいだけのときに、タグリストを取得しました。

デフォルトのGit PAGERをではcatなくに変更することでも、この動作を制御できますless。エディターではなくiTermでスクロールしたい。必要なときにエディタを使いたい。

そう:

git config --global core.pager cat

2
ええ、これは私にとって有効な答えになるはずです
Tura

2
ヘッドアップをありがとう。私は数ヶ月使用した後、私は猫をまだ使用しているgit logことを認めますが、例えばそれをするときはそれが面倒です。私は元の振る舞いを逃しているだけですが、この観点から私のワークフローを改善する時間はありませんでした。
ionescu77

あなたが勝つ!...パーフェクト!
sdlins

2
これはgit log... にも適用されることに注意してください
bagerard

10

~/.gitconfigこれを修正するために更新したい人は、次のようになります:

[pager]
   branch = false

ここで奇妙なこと:この設定は機能していて、数日後には機能しなくなったため、何も変更されなかったか、私の構成が適用されていないだけですか?
征服者

7

Gitブランチコマンドが「少ない」ように動作する

Gitはデフォルトでページャーで出力を開くためです(少なくともUbuntuでは)。受け入れ答えは完全に、ページャを交換なるあなたかもしれないような、あなたの出力が非常に長い場合。

ポケットベルをlessに置き換えることをお勧めします。これにより、端末の高さよりも小さい出力が「スクロール」しなくなります。

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


2

受け入れられた答えは間違っているようです。2つの問題があります。

  1. 実際には(デフォルト設定の)bashとzshで動作が異なります。「問題」はzshでのみ表示されます。
  2. 提案された解決策ではgit branch、常にポケットベルを使用しないようにします。これは、大量の出力がある場合には望ましくありません。

本当の理由は、bashとzshのLESSに関するデフォルトの定義が異なるためです。bashは何も定義しませんが、zshはに定義し-Rます。unset LESSzshで実行すると、すべてが正常に戻ります。

-R動作はまだ望ましいかもしれません。その場合は、次の命令を.zshrcに追加して、すべてを正常に機能させることができます。

export LESS=-FRX

-F「ファイル全体を最初の画面に表示できる場合、自動的に終了することが少なくなります」。ただし、-X同時に指定する必要があります。そうしないと、出力が画面全体に満たない場合、出力は表示されません。


0

https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

GIT_PAGERは、コマンドラインで複数ページの出力を表示するために使用されるプログラムを制御します。これが設定されていない場合、PAGERがフォールバックとして使用されます。

この問題を解決するには、シェルでPAGERとGIT_PAGERの設定を解除します。


1
設定解除PAGERGIT_PAGER未設定だった)問題がまだそこにあります。この環境変数を確認する必要がある場所はありますか?
DenniJensen

@DenniJensen次のようにコマンドでページャーを設定できますPAGER= git branch(等号の前にスペースを1つ入れ、等号の前にスペースを1つ入れます)。よくわかりませんgit branch | cat。例:
maaartinus

-1

私は同じに問題がありましたgit statusし、git config --global pager.status falseあまりにも解くことを。

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