Git log nasıl devam ettirilmez?


93

Birbirine ait birkaç git deposum ve üzerlerinde döngü yapmak için basit bir toplu iş / bash dosyam var. Genellikle hangi durumda olduklarını hızlı bir şekilde görmek için bir log komutu ile bunların üzerinden geçiyorum. Bu, bir şey dışında iyi çalışıyor: commit mesajı, konsolumun geniş karakter sayısından daha uzunsa (veya birden çok satırı varsa), git satırı gösterir, sonra (END) ile bir satırsonu ve devam etmek için q'ya basmam gerekir (sanırım çıktıyı daha fazla veya bunun gibi bir şeye yönlendirir). Misal:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

Birkaç kez q tuşuna basmam gerektiğinden bu oldukça rahatsız edici , oysa tüm bu tekilleri tek seferde görmek istiyorum.

Bu davranışı nasıl devre dışı bırakabilirim (tercihen bu günlük biçimini korurken)?


Yanıtlar:


155

Git, çağrı cihazını devre dışı bırakmak için bir seçeneğe sahiptir:

git --no-pager log --decorate=short --pretty=oneline -n1

Çağrı cihazınız hatları kesiyorsa ve bu davranışı korumak istiyorsanız, ya da cut...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

... veya GIT_PAGERçağırmadan önce ortam değişkenini ayarlayın :

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1

--no-pagerGerektiğinde bu seçenek için bir kestirmeyi varsayılan veya daha iyi yapmanın bir yolu var mı ? Ben aliasing düşünce gitnpiçin git --no-pager, ama daha iyi bir çözüm olduğunu düşünüyorum.
Islam Azab

1
@IslamAzab, sen takma olabilir gitiçin /usr/bin/git --no-pagerhangi tüm git aramalar için çağrı cihazını devre dışı olur.
mrkmg

1
@WarrenP gityerleşik çağrı cihazına sahip değil. Bunun yerine, Unix felsefesini takip eder ve sahip olduğunuz her şeyi kullanır $PAGER. diğer kötü yazılmış araçların aksine bunu rastgele yapmak yerine gither zaman kullanır $PAGER. Sadece sihirli gitvarsa olmasıdır $LESSedilir tanımlanmamış , bu tanımlayacaktır $LESSdeğere FRX. Daha fazla ayrıntı için github.com/git/git/blob/master/Documentation/config.txt#L766 konusuna bakın .
Mikko Rantalainen

@WarrenP gitbasitçe, git sayfalandırmaya ihtiyaç duyduğunda kullanılmak üzere özel değer tanımlamanıza izin verecek bir geçersiz kılma sağlar . GIT_PAGERPAGER
Mikko Rantalainen

1
Sadece git için davranışı düzelten en basit durum: export GIT_PAGER = cat
Stragulus

17

Özellikle alt komut kullanırken çağrı cihazını kalıcı olarak devre dışı bırakma sorunu için başka bir çözüm log:

  • yalnızca mevcut depo için:
    git config pager.log false

  • git kurulumunuz için (yani makinenizdeki tüm depolar):
    git config --global pager.log false

Tahmin edebileceğiniz gibi, seçici olarak diğer bazı alt komutlar için çağrı cihazının açık veya kapalı olması gerektiğinde aynı şey çalışır .
Örneğin. için branch(şube yazdırır) alt o olacak

git config pager.branch false


Önerilen çözüm tartışmalı bir şekilde daha zariftir.

  • git --no-pagerbelirli bir komutu her çalıştırdığınızda kullanmak .
    Çünkü, oldukça mümkün, her seferinde yazmak istemiyorsunuz.

  • git --no-pageriçin bir takma ad olarak belirtme git
    Çünkü, büyük olasılıkla, örtük genel yapılandırmadan kaçınmak VEYA bazı durumlarda çağrı cihazının etkinleştirilmesini istiyorsunuz .

  • PAGERveya gibi bazı ortam değişkenlerine güvenir GIT_PAGER.
    Çünkü bunu yapmak için, mevcut terminal oturumunuzda ayarlandığından emin olmanız gerekir. Ve eğer yeni terminaliniz her oluşturulduğunda otomatik olarak özel bir değere ayarlanmasını istiyorsanız, örn ~/.bashrc. , Kabuk önyüklemeli dosyalardan birini değiştirmeniz gerekir . Bu büyük bir problem değil. Ancak bu önyüklemeli dosyalar sıklıkla başka uygulamalar tarafından da değiştirilir ve yalnızca Git tarafından kullanılanlar değil, başka birçok şey içerir. Bu nedenle, teoride, git ile ilgili ayarları git configörneğin içine koymak yerine kullanarak belirlemek daha iyidir ~/.bashrc.


Devre dışı bırakmak için alternatif çözüm pageriçin tüm alt komutlar belirtmektir catçağrı için kullanacağı yarar Git gibi:

  • git config core.pager cat VEYA
  • git config --global core.pager cat

Cevabım, aşağıdakinin bir şekilde yeniden ifade edilmesidir:
"git diff'in bir çağrı cihazı kullanması engellenir mi?"
https://stackoverflow.com/a/6986231/6103242

Başka bir ilgili tartışmaya işaret etmek için referans verilmiştir.


3

Tüm komutlar için çağrı cihazını devre dışı bırakın:

git config --global core.pager '' 

2

--No-pager sizin için çalışmazsa, daha az -F'ye yönlendirirsiniz.

git log --decorate --oneline -5 | less -F
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.