Verhindern Sie, dass das Git-Submodul foreach für jedes Modul weniger öffnet

Verhindern Sie, dass das Git-Submodul foreach für jedes Modul weniger öffnet

Ich muss gelegentlich die Git-Untermodule durchsuchen, für die ich Folgendes verwende:

git submodule foreach 'git grep x'

Seit ich jedoch zu zsh gewechselt bin, wird für jedes Untermodul eine kleinere Eingabeaufforderung geöffnet, selbst wenn keine Optionen vorhanden sind. Was mir viel lieber wäre, wäre, wenn die gesamte Ausgabe auf dem Terminal ausgedruckt würde.

Meine aktuelle Lösung besteht darin, Folgendes aufzurufen:

git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a

Damit erreiche ich, was ich will, aber ich habe das Gefühl, dass mir eine Option oder elegantere Lösung fehlt. Gibt es eine?

Antwort1

Versuchen Sie, den von Git verwendeten Pager zu ändern:

GIT_PAGER="cat" git submodule foreach 'git grep x'

Oder wenn Sie weniger verwenden möchten, aber nur, wenn die Ausgabe über den Bildschirm hinausgeht:

GIT_PAGER="less -FX" git submodule foreach 'git grep x'

Sie können den Pager pro Projekt mithilfe von festlegen git configoder natürlich auch die Umgebungsvariablen global einstellen.

Antwort2

Nur um die anderen Methoden abzudecken:

Methode 1:--nopager

git submodule foreach 'git --nopager grep x'

Methode Nr. 2: Pager vollständig deaktivieren

git config --global core.pager cat

Aus der Manpage von git-config:

core.pager Der Befehl, den Git zum Paginieren der Ausgabe verwendet. Kann mit der Umgebungsvariable GIT_PAGER überschrieben werden. Beachten Sie, dass Git die Umgebungsvariable LESS auf FRSX setzt, wenn sie beim Ausführen des Pagers nicht gesetzt ist. Sie können diese Einstellungen ändern, indem Sie die Variable LESS auf einen anderen Wert setzen. Alternativ können diese Einstellungen auf Projekt- oder globaler Basis überschrieben werden, indem Sie die Option core.pager setzen. Das Setzen von core.pager hat keine Auswirkungen auf das oben beschriebene Verhalten der Umgebungsvariable LESS. Wenn Sie also die Standardeinstellungen von Git auf diese Weise überschreiben möchten, müssen Sie dies explizit tun. Um beispielsweise die Option S abwärtskompatibel zu deaktivieren, setzen Sie core.pager auf less -+S. Dies wird von Git an die Shell übergeben, die den endgültigen Befehl in LESS=FRSX less -+S übersetzt.

Methode Nr. 3:pager.<cmd>

Sie können die Paginierung auch für einzelne Git-Unterbefehle deaktivieren, indem Sie die Einstellung „pager.setting“ anstelle von „core.pager“ verwenden, und Sie können Ihre Einstellungen pro Git-Repository ändern (--global weglassen).

git config --global pager.grep cat

Aus der Manpage von git-config:

Pager. Wenn der Wert boolesch ist, wird die Paginierung der Ausgabe eines bestimmten Git-Unterbefehls beim Schreiben auf ein TTY ein- oder ausgeschaltet. Andernfalls wird die Paginierung für den Unterbefehl mithilfe des durch den Wert von Pager angegebenen Pagers aktiviert. Wenn --paginate oder --no-pager in der Befehlszeile angegeben ist, hat dies Vorrang vor dieser Option. Um die Paginierung für alle Befehle zu deaktivieren, setzen Sie core.pager oder GIT_PAGER auf cat.

Methode Nr. 4: Das Verhalten von „less“ ändern ( -F -X)

Sie können Less so neu konfigurieren, dass es „bedingt“ nur nach Dateien sucht, deren Inhalt größer als ein Bildschirm ist ( -F), und Less daran hindern, den Bildschirm anschließend zu löschen ( X).

git config --global core.pager less -F -X

Verweise

Antwort3

In diesem Fall habe ich den gesamten Befehl neu gepaget

git submodule ... | less

aber wir verlieren jegliche mögliche Formatierung von Unterbefehlen.

Dann wurde mir klar, dass wir das gleiche Problem mit „git status“ haben, also nach dem Lesen der Antwort auf „Wie kann ich einen Pager für die Ausgabe des Git-Status einschalten?" Ich würde vorschlagen

git config --global pager.submodule "less -FX"

verwandte Informationen