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
不相关:您可以将cmds包裹在cd $ i,cd ..中,而无需:do(cd $ i; ...;); 完成并在子外壳中运行CD。这不那么脆弱。
威廉·珀塞尔

关心将“正确”标记移到ThomasEdwards答案吗?它确实以“自然”方式回答。
基督徒

1
我想知道Linus在开发git时会想到什么,因为它显然违反了说沉默是黄金的基本UNIX规则之一。这里没有回答的是,是否可以一劳永逸地在git的配置中添加一些设置,使其成为一个良好的UNIX公民。
约翰·布勒(JohanBoulé)

Answers:


19

将输出重定向到/ dev / null对我来说似乎是一种自然的方式。尽管我过去曾定义过一个quiet_git shell函数,以用于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
}

除非git命令失败,否则这将禁止stdout和stderr。不好看 实际上,stdout文件将被忽略,它应该将其重定向到/ dev / null。虽然有效。然后,您可以稍后在脚本中执行“ quiet_git push”等操作。


10
看到@ThomasEdwards答案,好得多
Robin Winslow

240

您可以使用--quiet-q,也可以将其用于其他Git命令:

git commit --quiet
git push --quiet

2
我似乎无法以这种方式使git commit保持沉默。它忽略任何一个标志。
2014年

8
您需要在命令后添加它。 git pull -qgit 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'1

6
如果你真的想NO输出,使用git command >/dev/null 2>&1。这会将stdout和stderr都重定向到/ dev / null。这些--quiet选项用于生成简洁的输出,而不是用于完全抑制输出@Ankur
Brandon

17

最后使用&> /dev/null会给您一个完全无声的git命令输出。

git fetch origin master &> /dev/null

1
仅在csh中,大多数建议使用bourne shells进行shell脚本编写。
hd1 2016年

@ hd1不,&>是bash IO重定向操作符。在此处查看3.6 tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
汉斯·克里斯蒂安

@HansKrisian是的,bash结合了csh的交互功能和sh的脚本。引用相同的方法:“ Bash是sh兼容的shell,它融合了Korn shell(ksh)和C shell(csh)的有用功能”。
hd1 2016年

1
目的是删除参考消息,但仍显示错误。我还没有研究过git在stdout和stderr方面的表现如何,但是重定向这两种气味却是一个非常糟糕的主意。
约翰·布勒(JohanBoulé)

6

请注意,即使使用 --quiet,a git fetch(触发git gc)也会产生一些输出。
那是因为的git gc部分git fetch

现在不一样了,开始git的2.1.1(9月2014):看提交6fceed3bea59d747c160972c67663e8b8c281229阮泰玉维战(pclouds

获取: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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.