Git peut-il fonctionner en «mode silencieux»?

106

Est-il possible d'exécuter n'importe quelle commande git en mode "silencieux"? Par exemple, puis-je dire « git push origin» et ne rien voir à l'écran?

Je suppose que je peux rediriger IO vers /dev/null(fonctionne bien), mais .. est-ce que git permet quelque chose comme ça naturellement?

Vous trouverez ci-dessous un script rapide qui effectue un commit EOD automatique, utilisé lorsque j'ai besoin de prendre le train et que je ne veux pas laisser de code sur mon ordinateur local

  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

S'il vous plaît, faites-moi savoir.

James Raitsev
la source
1
Unrelated: plutôt que d'envelopper les cmds dans cd $ i, cd .., vous pouvez faire: for i in *; faire (cd $ i; ...;); fait et exécutez le cd dans un sous-shell. C'est moins fragile.
William Pursell
Voulez-vous déplacer la marque "correcte" vers la réponse ThomasEdwards? Il répond vraiment de manière "naturelle".
Christian
1
Je me demande ce que Linus avait en tête quand il a développé git, car il enfreint clairement l'une des règles UNIX de base qui dit que le silence est d'or. Ce qui n'a pas été répondu ici, c'est s'il est possible de mettre un paramètre dans la configuration de git pour en faire un bon citoyen UNIX une fois pour toutes.
Johan Boulé

Réponses:

19

Rediriger la sortie vers / dev / null me semble être une manière naturelle de le faire. Bien que j'aie défini dans le passé une fonction shell quiet_git comme celle-ci pour une utilisation dans les tâches 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
}

Cela supprimera stdout et stderr, sauf si la commande git échoue. Ce n'est pas joli; en fait, le fichier stdout est ignoré et il devrait simplement le rediriger vers / dev / null. Fonctionne, cependant. Et puis vous pouvez simplement faire "quiet_git push", etc. plus tard dans le script.

araqnid
la source
10
Voir la réponse @ThomasEdwards, beaucoup mieux
Robin Winslow
240

Vous pouvez utiliser --quietou -q, qui peut également être utilisé pour d'autres commandes Git:

git commit --quiet
git push --quiet
Thomas Edwards
la source
2
Je n'arrive pas à faire taire git commit de cette façon. Il ignore les deux indicateurs.
GaryBishop
8
Vous devez l'ajouter après la commande. git pull -qou git push origin master --quiet. Je suis sur git 1.8.x
Mendhak
7
@Mendhak, ne fonctionne pas (au moins ce n'est pas silencieux). Par exemple, git pull -q origin master > /dev/nulldonne "Total 4 (delta 3), réutilisé 4 (delta 3)". C'est avec git 2.0.1.
Matthew Flaschen
3
Même en utilisant --queit (ou -q), il imprime toujours une sortie. Par exemple, lorsque vous utilisez git checkout -q (nom_branche), si c'est la première fois que la branche est extraite, il affichera un message indiquant que la nouvelle branche a été configurée. Existe-t-il un moyen (un indicateur) à l'aide duquel toutes ces sorties peuvent être réduites au silence?
Ankur
6
Si vous ne voulez pas de sortie, utilisez git command >/dev/null 2>&1. Cela redirige à la fois stdout et stderr vers / dev / null. Les --quietoptions sont pour générer une sortie succincte, pas pour supprimer entièrement la sortie @Ankur
Brandon
17

Utiliser &> /dev/nullà la fin vous donne une sortie de commande git complètement silencieuse.

git fetch origin master &> /dev/null
Hans Kristian
la source
1
Seulement dans csh, la plupart recommandent de faire des scripts shell à l'aide de bourne shells.
hd1
@ hd1 non, &>est un opérateur de redirection bash IO. Regardez la version 3.6 ici tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Hans Kristian
@HansKrisian oui, bash a réuni les fonctionnalités interactives de csh et les scripts de sh. Citant le même howto: "Bash est un shell compatible sh qui incorpore des fonctionnalités utiles du shell Korn (ksh) et du shell C (csh)".
hd1
1
Le but est de supprimer les messages d'information, tout en affichant des erreurs. Je n'ai pas étudié à quel point git se comporte bien en ce qui concerne ce qui va à stdout et ce qui va à stderr, mais rediriger les deux sent une très mauvaise idée.
Johan Boulé
6

Notez que même avec --quiet , a git fetch(qui déclenche a git gc) générerait une sortie.
C'est à cause de la git gcpartie du git fetch.

Plus maintenant , à partir de git 2.1.1 (septembre 2014): voir commit 6fceed3bea59d747c160972c67663e8b8c281229 de Nguyễn Thái Ngọc Duy ( pclouds)

chercher: silence git-gcsi --quietest donné

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);
VonC
la source