git branch
コマンドを使用してすべてのブランチを一覧表示すると、git branch | less
の出力が表示されます。
ls
がファイルに対して行うように、コマンドgit branch
はブランチのリストを表示することになっています。
これは私が得る出力です:
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
前述のように、これはGit 2.16で導入されたデフォルトの動作変更 でした 。
git branch
config設定 を使用すると、pager.branch
のページ出力をデフォルトでオフに戻すことができます。
git config --global pager.branch false
他の答えが指摘したように、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
あなたが本当にポケットベルのことを嫌いなら、あなたはそれをグローバルにまたはコマンドごとに無効にすることができます(他の答えを見てください)。
意味論を議論するためではありませんが、あなたが得ている振る舞いは が ですデフォルトです。それはあなたが別の何かを要求しないときあなたがそれを得る理由です。デフォルトでは、branch
(および他の多数のgitコマンド)は端末に出力を送るときにページャを使います。
--no-pager
オプションを使ってこのデフォルトを上書きすることができます
git --no-pager branch
あるいは、あなたが出力をファイルにリダイレクトするならば、gitはそれが端末に書き込んでいないことを検出するべきであり、それでとにかくページャを使うべきではありません。 (一方で、それはスクリプティングのユースケースを示唆しています、その場合あなたはgit for-each-ref
よりもgit branch
のような配管コマンドを使うことを考慮すべきです。)
このgitの振る舞いも私にとってますます迷惑になりました。たとえばタグを一覧表示するだけの場合は、タグリストがless
になります。
デフォルトの Git PAGER をcat
ではなくless
に変更することによっても、この振る舞いを制御できます。編集者よりもむしろiTermでスクロールしたいです。好きなときにエディタを使うのが好きです。
そう:
git config --global core.pager cat
助けになれば幸いです。
これを修正するために~/.gitconfig
を更新したい人のために、それはこのように見えるでしょう:
[pager]
branch = false
Git branchコマンドは 'less'のように振舞います
デフォルトではgitは(少なくともubuntuでは)ポケットベルで出力を開くので、受け入れられた答えはポケットベルに完全に置き換わるでしょう。
端末の高さよりも出力が「スクロール」しないように、ページャをless
に置き換えることをお勧めします。
git config --global --replace-all core.pager "less -F -X"
以下をせよ:
[alias]
br = !git --no-pager branch
https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables
GIT_PAGERは、マルチページ出力をコマンドラインに表示するために使用されるプログラムを制御します。これが設定されていない場合、PAGERはフォールバックとして使用されます。
あなたの問題を解決するために、あなたはあなたのシェルでPAGERとGIT_PAGERを設定解除することができます。