Чи може 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 .., ви можете зробити: for i in *; do (cd $ i; ...;); зроблено та запустіть компакт-диск у підзарядці. Це менш тендітно.
Вільям Перселл

Хочете перенести "правильний" знак на відповідь ThomasEdwards? Це дійсно відповідає "природним" способом.
Крістіан

1
Мені цікаво, що мав на увазі Лінус, коли розвинув git, адже це явно порушує одне з основних правил UNIX, яке говорить про тишу золоту. На що тут не відповіли - це якщо можна встановити якісь параметри в конфігурацію git, щоб зробити її хорошим громадянином UNIX раз і назавжди.
Йохан Буле

Відповіді:


19

Перенаправлення виводу на / dev / null здається мені природним способом зробити це. Хоча я раніше визначав функцію оболонки silent_git на зразок цієї для використання в роботах 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
}

Це придушить stdout і stderr, якщо тільки команда git не завершиться. Це не дуже; насправді файл stdout ігнорується, і він повинен просто перенаправити це на / dev / null. Працює, хоча. І тоді ви можете просто зробити "тихий натискання" і т.д. далі в сценарії.


10
Дивіться відповідь @ThomasEdwards, набагато краще
Робін Уінслоу

240

Ви можете використовувати --quietабо -q, що також можна використовувати для інших команд Git:

git commit --quiet
git push --quiet

2
Я не можу мовчати, щоб git чинив так. Він ігнорує або прапор.
GaryBishop

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

3
Навіть при використанні --queit (або -q), він все ще друкує деякий вихід. Наприклад, при використанні git checkout -q (ім'я гілки), якщо вперше перевіряється філія, вона надрукує повідомлення про те, що нова гілка була налаштована. Чи є якийсь (якийсь прапор), за допомогою якого можна вимкнути весь такий вихід?
Анкур

6
Якщо ви насправді хочете вивести НІ , використовуйте 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, більшість рекомендують робити сценарій оболонки, використовуючи бурнові оболонки.
hd1

@ hd1 ні, &>це невдалий оператор переадресації IO. Подивіться на 3.6 тут tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Ганс Крістіан

@HansKrisian так, Баш приніс інтерактивні функції з csh та сценаріїв від sh разом. Цитуючи з того самого способу: "Bash - це сумісна з оболонками ш, яка містить корисні функції із шкаралупи Korn (ksh) та C shell (csh)".
hd1

1
Мета - видалення інформаційних повідомлень, але все ж відображення помилок. Я не вивчав, як добре поводиться git щодо того, що йде на stdout і що йде на stderr, але перенаправлення обох запахів є дуже поганою ідеєю.
Йохан Буле

6

Зауважте, що навіть при --quiet (a git fetch(що запускає a git gc)) буде генерувати деякий вихід.
Це через git gcчастину git fetch.

Більше, починаючи з git 2.1.1 (вересень 2014 р.): Див. Виконувати 6fceed3bea59d747c160972c67663e8b8c281229 від Nguyễn Thái Ngọc Duy ( 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.