web-dev-qa-db-ja.com

Git branchコマンドは 'less'のように振舞います

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

lsがファイルに対して行うように、コマンドgit branchはブランチのリストを表示することになっています。

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

Enter image description here

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

私はoh_my_zshと一緒にZSHを使っています(Gitには何もありません)、そして私の.gitconfigはこのように見えます:

[user]
  email = [email protected]
  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
198
DenniJensen

前述のように、これはGit 2.16で導入されたデフォルトの動作変更 でした

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

git config --global pager.branch false
377
Zach Schneider

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

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

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

-Rまたは - RAW-CONTROL-CHARS
[...] ANSIの "color"エスケープシーケンスは "raw"形式で出力されます。

-Xまたは--no-init
termcapの初期化文字列と初期化解除文字列の端末への送信を無効にします。画面をクリアするなど、初期化解除文字列で不要な処理が行われる場合は、これが望ましい場合があります。

あなたが記述した振る舞いを得たなら、あなたはたぶん他の何かに設定された$LESSを持っていて、それを設定解除することは長い出力のための "ポケットベル"振る舞いを保ちながら問題を取り除きます。あるいは、$LESSファイルにこれを追加することで、.gitconfigを現状のままにしておくための動作を有効にすることができます。

[core]
    pager = less -FRX

あなたが本当にポケットベルのことを嫌いなら、あなたはそれをグローバルにまたはコマンドごとに無効にすることができます(他の答えを見てください)。

24
Matthieu Moy

意味論を議論するためではありませんが、あなたが得ている振る舞いはですデフォルトです。それはあなたが別の何かを要求しないときあなたがそれを得る理由です。デフォルトでは、branch(および他の多数のgitコマンド)は端末に出力を送るときにページャを使います。

--no-pagerオプションを使ってこのデフォルトを上書きすることができます

git --no-pager branch

あるいは、あなたが出力をファイルにリダイレクトするならば、gitはそれが端末に書き込んでいないことを検出するべきであり、それでとにかくページャを使うべきではありません。 (一方で、それはスクリプティングのユースケースを示唆しています、その場合あなたはgit for-each-refよりもgit branchのような配管コマンドを使うことを考慮すべきです。)

16

このgitの振る舞いも私にとってますます迷惑になりました。たとえばタグを一覧表示するだけの場合は、タグリストがlessになります。

デフォルトの Git PAGER catではなくlessに変更することによっても、この振る舞いを制御できます。編集者よりもむしろiTermでスクロールしたいです。好きなときにエディタを使うのが好きです。

そう:

git config --global core.pager cat

助けになれば幸いです。

9
ionescu77

これを修正するために~/.gitconfigを更新したい人のために、それはこのように見えるでしょう:

[pager]
   branch = false
5
Nick

Git branchコマンドは 'less'のように振舞います

デフォルトではgitは(少なくともubuntuでは)ポケットベルで出力を開くので、受け入れられた答えはポケットベルに完全に置き換わるでしょう。

端末の高さよりも出力が「スクロール」しないように、ページャをlessに置き換えることをお勧めします。

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

2
Imran

以下をせよ:

[alias]
  br = !git --no-pager branch
1
João Tiago

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

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

あなたの問題を解決するために、あなたはあなたのシェルでPAGERとGIT_PAGERを設定解除することができます。

0
C-Otto