Git şube komutu 'az' gibi davranıyor


415

git branchTüm dalları listelemek için komutu kullandığımda , çıktısını görüyorum git branch | less.

Komutun git branch, lsdosyalar için olduğu gibi dalların bir listesini göstermesi gerekiyor .

Bu elde edilen çıktıdır:

Resim açıklamasını buraya girin

Varsayılan davranışını nasıl edinebilirim git branch? Disk belleği çıktısına ne sebep olur?

ZSH ile oh_my_zsh(orada Git için hiçbir şey) kullanıyorum ve benim .gitconfiggibi görünüyor:

[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

Yanıtlar:


738

Mark Adelsberger'in cevabına yapılan yorumlarda belirtildiği gibi , bu Git 2.16'da varsayılan bir davranış değişikliğiydi .

Disk belleği çıktısını yapılandırma ayarıylagit branch varsayılan olarak geri kapatabilirsiniz :pager.branch

git config --global pager.branch false

127
Bu temerrüt yapmak için tuhaf, tuhaf bir karardır. Unix-y cli araçlarımın isterseniz zincirleyebileceğiniz aptal basit programlar gibi davranmasını bekliyorum, ancak sanırım bu tartışma başka bir site için.
Stragulus

7
@Stragulus Yeni varsayılanın git branchbaşka bir şeyle zincirlenmenizi engellemediğini unutmayın . Boru algılamayı kullanarak Git, git branch > branches.txtveya komutlar içindeki stdout'a dal listesini gönderir git branch | wc -l.
Rory O'Kane

3
@ RoryO'Kane ama çağrı cihazı ile, ESC/qbasit bir git branchkontrol sonra bir tür ekstra var .
mitnk

23
@mitnk Mutlaka değil. Çağrı cihazı ise less, ekleyebilir --no-init --quit-if-one-screensizin için LESSneden olacaktır ortam değişkeninin, lessmetin kaydırma yapmadan görülebilir eğer Stdout'a sadece yazmak için. Daha man lessfazla ayrıntı için bakınız.
Rory O'Kane

13
Yapılandırma dosyanıza manuel olarak eklemek istiyorsanız, [pager] branch = false(iki satırda).
Sam

56

Diğer yanıtların belirttiği gibi Git less, çoğu komut için kendisini varsayılan olarak bir çağrı cihazına ( varsayılan olarak) aktarır.

Bununla birlikte önemli bir nokta, LESS ortam değişkeni ayarlanmadığında Git'in FRX'e ayarlanması ve bunun sonucu olarak, kullanıcı tarafından görülebilen davranışın komutun çıktısı kısa olduğunda çağrı cihazının kullanılmamasıyla aynı olmasıdır (ör. sadece birkaç şubeniz varsa). Daha azını görün :

-F veya - eğer bir ekrandan
çık Dosya ilk ekranda tüm dosya görüntülenebiliyorsa otomatik olarak daha az çıkılmasına neden olur.

-R veya --RAW-CONTROL-CHARS
[...] ANSI "renk" kaçış dizileri "ham" formda çıkar.

-X veya --no-init
Termcap başlatma ve dezenfekte etme dizelerini terminale göndermeyi devre dışı bırakır. Başlatma dizesi ekranı temizlemek gibi gereksiz bir şey yaparsa bu bazen istenebilir.

$LESSAçıkladığınız davranışı alırsanız, büyük olasılıkla başka bir şeye ayarlamış olursunuz ve unset LESSuzun bir çıktı için "çağrı cihazı" davranışını korurken onu ( ) ayarlamak sorunu ortadan kaldırır. Alternatif olarak, $LESSolduğu gibi tutarken davranışını bunu .gitconfigdosyanıza ekleyerek etkinleştirebilirsiniz :

[core]
    pager = less -FRX

Çağrı cihazından gerçekten hoşlanmıyorsanız, global olarak veya komut başına esasına göre devre dışı bırakabilirsiniz (diğer cevaplara bakın).


40

Değil anlambilim iddia, ancak alıyoruz davranış için olan varsayılan. Bu yüzden farklı bir şey istemediğinizde elde edersiniz. Varsayılan olarak, branch(ve diğer birçok Git komutu) terminale çıkış gönderirken bir çağrı cihazı kullanır.

Şu --no-pagerseçeneği kullanarak bu varsayılanı geçersiz kılabilirsiniz :

git --no-pager branch

Veya çıktıyı bir dosyaya yönlendirirseniz Git, bir uçbirime yazmadığını algılamalı ve bu nedenle yine de bir çağrı cihazı kullanmamalıdır. (Öte yandan, bu bir komut dosyası kullanım durumu gösterir, bu durumda git for-each-reftercih ettiğiniz gibi bir sıhhi tesisat komutu kullanmayı düşünmelisiniz git branch.)


git --no-pager branchİşler. Peki bu nasıl yapılır? Yalnızca PAGERortam değişkeni olarak ayarlanır less. Bu varsayılan davranış değildir. Tüm kolejlerimin terminale yazdırılan bir listesi var.
DenniJensen

Hangi git sürümünü kullanıyorsunuz? Ve meslektaşlarınız hangisini kullanıyor?
Lasse V. Karlsen

2.16.0! Bu, bu sürümde git ile tanıtılan bir özellik mi?
DenniJensen

Evet, şimdi varsayılan. github.com/git/git/blob/master/Documentation/RelNotes/… Yanımda aynı sürümü kullanan benim kolej ve bu sorunu yok :) thx @mark
DenniJensen

1
Buradaki en üstün cevap, üzgünüm, çok az sayıda oyu var, çünkü bu şaheseri bulmak için biraz kaydırdım.
codepleb

25

Bu Git davranışı benim için de giderek daha sinir bozucuydu. Etiket listemi lesssadece etiketleri listelemek istediğimde aldım .

Bir varsayılan değiştirerek de bu davranışı kontrol edebilirsiniz Git PAGER için catyerine less. İTerm'de bir editörden ziyade kaydırmayı tercih ederim. İstediğimde editörü kullanmayı seviyorum.

Yani:

git config --global core.pager cat

1
Evet, bu benim için geçerli bir cevap olmalı
Tura

2
söylediğin için teşekkürler. Birkaç ay kullanımdan sonra itiraf ediyorum, hala kedi kullanıyorum, ancak bunu yaparken git logsinir bozucu. Sadece orijinal davranışı özlüyorum, ancak bu bakış açısıyla günlük iş akışımı iyileştirmek için zamanım olmadı.
ionescu77

Sen kazandın! ... Mükemmel!
sdlins

2
Bu da aynı zamanda geçerli olacağını unutmayın git log...
bagerard

10

Bunu ~/.gitconfigdüzeltmek için güncellemek isteyenler için şöyle görünecektir:

[pager]
   branch = false

burada garip bir şey vardı: bu ayar çalışıyordu ve bazı günlerden beri artık değişmedi, hiçbir şey değişti mi ya da benim yapılandırmam uygulanmadı mı?
ConquerorsHaki

7

Git şube komutu 'az' gibi davranıyor

Git varsayılan olarak çıktıyı çağrı cihazında açar (en azından Ubuntu'da). Kabul edilen cevap , çıktınızın çok uzun olması durumunda beğenmeyebileceğiniz çağrı cihazının tamamen yerini alacaktır .

Çağrı cihazını değiştirmenizi tavsiye ederim less, bu yüzden çıkışları terminalin yüksekliğinden daha az "kaydırmaz".

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


2

Kabul edilen cevap yanlış görünüyor. İki sorun var:

  1. Davranış aslında (varsayılan yapılandırılmış) bash ve zsh arasında farklıdır. 'Sorun' sadece zsh altında görünür.
  2. Önerilen çözüm, git branchher zaman bir çağrı cihazı kullanmayacaktır, bu da çok fazla çıktı olduğunda istenmeyecektir.

Asıl sebep, bash ve zsh'ın LESS hakkında farklı varsayılan tanımları olması: bash hiçbir şey tanımlamazken, zsh bunu tanımlamaktadır -R. unset LESSZsh yaptığımda , her şey normale döner ....

-RDavranış hala arzu edilebilir. Bu durumda, her şeyi çalışır durumda tutmak için .zshrc'nize aşağıdaki talimatları ekleyebilirsiniz:

export LESS=-FRX

-F'tüm dosya ilk ekranda görüntülenebiliyorsa otomatik olarak daha az çıkılmasına neden olur'. Ancak, -Xeşzamanlı olarak belirtilmesi gerekir, aksi takdirde bir taramadan daha az çıktı olduğunda hiçbir çıktı gösterilmez.


0

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

GIT_PAGER, komut satırında çok sayfalı çıktı görüntülemek için kullanılan programı kontrol eder. Bu ayarlanmazsa, PAGER yedek olarak kullanılır.

Sorununuzu çözmek için PAGER ve GIT_PAGER öğelerini kabuğunuzdan kaldırabilirsiniz.


1
Ayarlanmadı PAGER( GIT_PAGERayarlanmadı) sorunu hala var. Bu env değişkenlerini kontrol etmem gereken herhangi bir yer var mı?
DenniJensen

@DenniJensen Çağrı cihazını komutta şu şekilde ayarlayabilirsiniz PAGER= git branch(bir boşluktan sonra ve hiçbiri eşittir işareti tam olarak yazıldığı gibi). Hiçbir fikrim yok, örn git branch | cat.
maaartinus

-1

Ben de aynı sorun yaşadım git statusve git config --global pager.status falsebunu da çözer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.