Git "sessiz modda" çalışabilir mi?


106

"Sessiz" modda herhangi bir git komutunu çalıştırmak mümkün müdür? Örneğin, " git push origin" diyebilir miyim ve ekranda hiçbir şey görünmüyor mu?

Sanırım IO'yu /dev/null(iyi çalışıyor) 'a yönlendirebilirim , ama .. git böyle bir şeye doğal olarak izin veriyor mu?

Aşağıda, treni yakalamam gerektiğinde ve yerel bilgisayarımda kod bırakmak istemediğimde kullanılan, otomatik EOD kaydı yapan hızlı bir komut dosyası var

  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

Lütfen bana haber ver.


1
İlgisiz: cmd'leri cd $ i, cd .. içine kaydırmak yerine, şunları yapabilirsiniz: for i in *; do (cd $ i; ...;); yapılır ve cd'yi bir alt kabukta çalıştırın. Bu daha az kırılgan.
William Pursell

"Doğru" işareti ThomasEdwards cevabına taşımak ister misiniz? Gerçekten "doğal" şekilde cevap veriyor.
Christian

1
Linus'un git geliştirirken aklında ne olduğunu merak ediyorum, çünkü sessizliğin altın olduğunu söyleyen temel UNIX kurallarından birini açıkça ihlal ediyor. Burada cevaplanmayan şey, git'in yapılandırmasına bir kez ve herkes için iyi bir UNIX vatandaşı yapmak için bir ayar koymanın mümkün olup olmadığıdır.
Johan Boulé

Yanıtlar:


19

Çıktıyı / dev / null'a yeniden yönlendirmek bana bunu yapmanın doğal bir yolu gibi görünüyor. Geçmişte cron işlerinde kullanmak için böyle bir quiet_git kabuk işlevi tanımlamış olmama rağmen:

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 komutu başarısız olmadıkça bu, stdout ve stderr'yi bastıracaktır. Hoş değil; aslında stdout dosyası göz ardı edilir ve bunu / dev / null'a yönlendirmelidir. Yine de çalışıyor. Ve sonra komut dosyasında daha sonra "quiet_git push" vb. Yapabilirsiniz.


10
@ThomasEdwards cevabına bakın, çok daha iyi
Robin Winslow

240

Diğer Git komutları için de kullanılabilen --quietveya kullanabilirsiniz -q:

git commit --quiet
git push --quiet

2
Git commit'i bu şekilde susturamıyorum. Her iki bayrağı da yok sayar.
GaryBishop

8
Komuttan sonra eklemeniz gerekiyor. git pull -qveya git push origin master --quiet. Git 1.8.x
Mendhak

7
@Mendhak çalışmıyor (en azından sessiz değil). Örneğin, git pull -q origin master > /dev/null"Toplam 4 (delta 3), yeniden kullanılan 4 (delta 3)" sonucunu verir. Git 2.0.1 ile.
Matthew Flaschen

3
--Queit (veya -q) kullanıldığında bile, yine de bazı çıktılar yazdırır. Örneğin, git checkout -q (dal_adı) kullanırken, dal ilk kez teslim alınıyorsa, yeni dalın kurulduğunu belirten bir mesaj yazdıracaktır. Tüm bu tür çıktıların susturulabileceği bir yol (bazı işaretler) var mı?
Ankur

6
Gerçekte HAYIR çıktı istiyorsanız , kullanın git command >/dev/null 2>&1. Bu hem stdout hem de stderr'i / dev / null'a yönlendirir. --quietSeçenekleri tamamen değil @Ankur çıkışını bastırmak için, özlü çıkışı için ürettiğini
Brandon

17

&> /dev/nullSonunda kullanmak size tamamen sessiz bir git komutu çıktısı sağlar.

git fetch origin master &> /dev/null

1
Yalnızca csh'de, çoğu kişi bourne kabukları kullanarak kabuk komut dosyası oluşturmayı önerir.
hd1

@ hd1 no, &>bir bash IO yönlendirme operatörüdür. 3.6 Buraya bakın tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Hans Kristian

@HansKrisian evet, bash, csh'den etkileşimli özellikler ve sh'den komut dosyası yazmayı birlikte getirdi. Aynı yöntemden alıntı yaparak: "Bash, Korn kabuğundan (ksh) ve C kabuğundan (csh) yararlı özellikler içeren, sh uyumlu bir kabuktur".
hd1

1
Amaç, bilgi mesajlarını kaldırmak, ancak yine de hataları görüntülemektir. Git'in stdout'a neyin stderr'e gittiği konusunda ne kadar iyi davrandığını araştırmadım, ancak her iki kokuyu da yeniden yönlendirmek çok kötü bir fikir gibi.
Johan Boulé

6

Hatta Not ile --quiet , bir git fetch(a tetiklediği git gc) bir çıktı üretecektir.
Bunun nedeni biridir git gcparçası git fetch.

Artık değil, git 2.1.1'den (Eylül 2014) başlayarak: görüntünün 6fceed3bea59d747c160972c67663e8b8c281229 , Nguyenn Thái Ngọc Duy ( pclouds)

Getirme: sessizliği git-gceğer --quietverilir

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.