Git può funzionare in "modalità silenziosa"?


106

È possibile eseguire qualsiasi comando git in modalità "silenziosa"? Ad esempio, posso dire " git push origin" e non vedere nulla sullo schermo?

Suppongo di poter reindirizzare IO a /dev/null(funziona bene), ma .. git consente qualcosa di simile naturalmente?

Di seguito è riportato uno script rapido che esegue il commit EOD automatico, utilizzato quando devo prendere il treno e non voglio lasciare codice sul mio computer locale

  1 clear
  2
  3 cd
  4 cd repo/active
  5
  6 for i in *
  7 do
  8   cd $i
  9   echo "Pushing " $i
 10   git add . -A >> /dev/null 
 11   git commit -a -m "EOD automatic commit" >> /dev/null 
 12   git push origin >> /dev/null 
 13   echo
 14   cd ..
 15 done

Per favore mi faccia sapere.


1
Non correlato: invece di racchiudere cmds in cd $ i, cd .., puoi fare: for i in *; do (cd $ i; ...;); fatto ed eseguire il cd in una subshell. Questo è meno fragile.
William Pursell

Ti interessa spostare il segno "corretto" nella risposta di ThomasEdwards? Risponde davvero in modo "naturale".
Christian

1
Mi chiedo cosa avesse in mente Linus quando ha sviluppato git, perché sta chiaramente infrangendo una delle regole base di UNIX che dice che il silenzio è d'oro. Quello che non è stato risposto qui è se è possibile mettere qualche impostazione nella configurazione di git per renderlo un buon cittadino UNIX una volta per tutte.
Johan Boulé

Risposte:


19

Reindirizzare l'output a / dev / null mi sembra un modo naturale per farlo. Anche se in passato ho definito una funzione di shell quiet_git come questa da utilizzare nei lavori cron:

quiet_git() {
    stdout=$(tempfile)
    stderr=$(tempfile)

    if ! git "$@" </dev/null >$stdout 2>$stderr; then
        cat $stderr >&2
        rm -f $stdout $stderr
        exit 1
    fi

    rm -f $stdout $stderr
}

Questo sopprimerà stdout e stderr, a meno che il comando git non fallisca. Non è carino; infatti il ​​file stdout viene ignorato e dovrebbe semplicemente reindirizzarlo a / dev / null. Funziona, però. E poi puoi semplicemente fare "quiet_git push" ecc. Più avanti nello script.


10
Vedi la risposta di @ThomasEdwards, molto meglio
Robin Winslow

240

Puoi usare --quieto -q, che può essere utilizzato anche per altri comandi Git:

git commit --quiet
git push --quiet

2
Non riesco a mettere a tacere git commit in questo modo. Ignora entrambi i flag.
GaryBishop il

8
Devi aggiungerlo dopo il comando. git pull -qo git push origin master --quiet. Sono su git 1.8.x
Mendhak

7
@ Mendhak, non funziona (almeno non è silenzioso). Ad esempio, git pull -q origin master > /dev/nullproduce "Totale 4 (delta 3), riutilizzato 4 (delta 3)". Questo è con git 2.0.1.
Matthew Flaschen

3
Anche quando si usa --queit (o -q), stampa comunque un output. Ad esempio, quando si utilizza git checkout -q (branch_name), se è la prima volta che il ramo viene estratto, verrà stampato un messaggio che dice che il nuovo ramo è stato configurato. Esiste un modo (qualche bandiera) utilizzando il quale tutti questi output possono essere messi a tacere?
Ankur

6
Se in realtà non si desidera alcun output, utilizzare git command >/dev/null 2>&1. Questo reindirizza sia stdout che stderr a / dev / null. Le --quietopzioni sono per generare un output succinto, non per sopprimere completamente l'output @Ankur
Brandon

17

L'utilizzo &> /dev/nullalla fine ti dà un output del comando git completamente silenzioso.

git fetch origin master &> /dev/null

1
Solo in csh, la maggior parte consiglia di eseguire script di shell utilizzando le shell bourne.
hd1

@ hd1 no, &>è un operatore di reindirizzamento IO bash. Guarda 3.6 qui tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Hans Kristian

@ HansKrisian sì, bash ha unito le funzionalità interattive di csh e lo scripting di sh. Citando dallo stesso howto: "Bash è una shell compatibile con sh che incorpora funzioni utili dalla shell Korn (ksh) e dalla shell C (csh)".
hd1

1
Lo scopo è rimuovere i messaggi informativi, ma visualizzare comunque gli errori. Non ho studiato come si comporta bene git riguardo a cosa va a stdout e cosa va a stderr, ma reindirizzare entrambi puzza come una pessima idea.
Johan Boulé

6

Nota che anche con --quiet , a git fetch(che attiva a git gc) genererebbe un output.
Questo è a causa delgit gc parte di git fetch.

Non più, a partire da git 2.1.1 (settembre 2014): vedi commit 6fceed3bea59d747c160972c67663e8b8c281229 da Nguyễn Thái Ngọc Duy ( pclouds)

fetch: silenzio git-gcse --quietviene dato

builtin/fetch.c:

argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
if (verbosity < 0)
argv_array_push(&argv_gc_auto, "--quiet");
run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.