gitは「サイレントモード」で動作しますか?


106

「サイレント」モードでgitコマンドを実行することは可能ですか?たとえば、「git push origin」と言っても画面に何も表示されません。

私はIOを/dev/null(正常に動作する)にリダイレクトできると思いますが、Gitはこのようなものを自然に許可しますか?

以下は、自動EODコミットを実行する簡単なスクリプトです。電車に乗る必要があり、ローカルコンピューターにコードを残したくない場合に使用します

  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

私にお知らせください。


1
関連なし:cmdをcd $ i、cd ..でラップするのではなく、次のことができます。do(cd $ i; ...;); サブシェルでcdを実行します。これは壊れにくいです。
ウィリアムパーセル

「正しい」マークをThomasEdwardsの回答に移動しますか?それは本当に「自然な」方法で答えます。
クリスチャン

1
Linusがgitを開発したときに何を念頭に置いていたのでしょうか。それは、沈黙が黄金であるというUNIXの基本的なルールの1つを明らかに破っているからです。ここで答えられなかったのは、gitの構成に何らかの設定を行って、UNIXの市民になることができるかどうかです。
JohanBoulé19年

回答:


19

出力を/ dev / nullにリダイレクトすることは、私にとってそれを行う自然な方法のようです。私は過去にcronジョブで使用するために次のようなquiet_gitシェル関数を定義しましたが、

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
}

これにより、gitコマンドが失敗しない限り、stdoutとstderrが抑制されます。それはきれいではありません。実際、stdoutファイルは無視され、/ dev / nullにリダイレクトされるだけです。動作しますが。そして、後ほどスクリプトで「quiet_git push」などを実行するだけです。


10
@ThomasEdwardsの回答をご覧ください。
ロビンウィンスロー

240

--quietまたはを使用できます-q。これは、他のGitコマンドにも使用できます。

git commit --quiet
git push --quiet

2
この方法でgit commitを黙らせることはできないようです。どちらのフラグも無視します。
GaryBishop、2014年

8
コマンドの後に追加する必要があります。 git pull -qまたはgit push origin master --quiet。私はgit 1.8.xにいます
Mendhak

7
@Mendhak、動作しません(少なくとも沈黙していません)。たとえばgit pull -q origin master > /dev/null、「合計4(デルタ3)、再利用4(デルタ3)」になります。これはgit 2.0.1に関するものです。
Matthew Flaschen 2014

3
--queit(または-q)を使用する場合でも、一部の出力が表示されます。たとえば、git checkout -q(branch_name)を使用する場合、ブランチが初めてチェックアウトされるのであれば、新しいブランチがセットアップされたことを示すメッセージが出力されます。そのようなすべての出力を沈黙させることができる何らかの方法(いくつかのフラグ)はありますか?
Ankur

6
実際にNO出力が必要な場合は、を使用しますgit command >/dev/null 2>&1。これにより、stdoutとstderrの両方が/ dev / nullにリダイレクトされます。--quietオプションはない完全@Ankur出力を抑制するために、簡潔な出力を生成しているため
ブランドン

17

&> /dev/null最後にを使用すると、完全にサイレントなgitコマンド出力が得られます。

git fetch origin master &> /dev/null

1
cshでのみ、ほとんどがbourneシェルを使用してシェルスクリプトを実行することをお勧めします。
hd1 2016

@ hd1いいえ、&>bash IOリダイレクト演算子です。こちらの3.6をご覧ください tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Hans Kristian

@HansKrisianはい、bashはcshのインタラクティブな機能とshのスクリプトを一緒にもたらしました。同じハウツーから引用:「Bashは、Kornシェル(ksh)とCシェル(csh)の便利な機能を組み込んだsh互換シェルです」。
hd1 2016

1
目的は情報メッセージを削除することですが、それでもエラーを表示します。私はgitがstdoutとstderrにどのように動作するかについて、どのように適切に動作するかを調べていませんが、両方の匂いをリダイレクトすることは非常に悪い考えです。
JohanBoulé19年

6

でも注意して --quietgit fetch(トリガーするにはgit gc)いくつかの出力を生成します。
それはのgit gc一部のためgit fetchです。

今後は、git 2.1.1(2014年9月)から開始:NguyễnTháiNgọcDuyからのコミット6fceed3bea59d747c160972c67663e8b8c281229を 参照pclouds

fetch:指定されたgit-gc場合--quietは無音

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.