क्या "साइलेंट मोड" में काम कर सकते हैं?


106

क्या "मूक" मोड में किसी भी गिट कमांड को निष्पादित करना संभव है? उदाहरण के लिए, क्या मैं " git push origin" कह सकता हूं और स्क्रीन पर प्रदर्शित कुछ भी नहीं देख सकता हूं ?

मुझे लगता है कि मैं IO को पुनर्निर्देशित कर सकता हूं /dev/null(ठीक काम करता है), लेकिन .. क्या यह स्वाभाविक रूप से कुछ ऐसा करने की अनुमति देता है?

नीचे एक त्वरित स्क्रिप्ट है जो स्वचालित ईओडी प्रतिबद्ध करता है, जब मुझे ट्रेन पकड़ने की आवश्यकता होती है और मैं अपने स्थानीय कंप्यूटर पर कोड नहीं छोड़ना चाहता हूं

  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
असंबंधित: cd $ i, cd .. में cmds लपेटने के बजाय, आप कर सकते हैं: i in * के लिए; do (cd $ i; ...;); किया और एक उपधारा में सीडी चलाते हैं। यह कम नाजुक है।
विलियम पर्ससेल

"सही" चिह्न को थॉमसएडवर्ड्स उत्तर में स्थानांतरित करने की देखभाल करें? यह वास्तव में "प्राकृतिक" तरीके से जवाब देता है।
ईसाई

1
मुझे आश्चर्य है कि जब उन्होंने गित विकसित की तो लिनुस के मन में क्या था, क्योंकि यह स्पष्ट रूप से मूल यूनिक्स नियम में से एक को तोड़ रहा है जो कहता है कि मौन स्वर्ण है। यहाँ जो उत्तर नहीं दिया गया वह यह है कि एक बार और सभी के लिए एक अच्छा यूनिक्स नागरिक बनाने के लिए git के कॉन्फिगरेशन में कुछ सेटिंग करना संभव है।
जोहान बोले

जवाबों:


19

आउटपुट को / dev / null में रीडायरेक्ट करना मुझे करने का एक स्वाभाविक तरीका लगता है। हालांकि मैंने अतीत में क्रोन नौकरियों में उपयोग के लिए इस तरह एक शांत_गिट शेल फ़ंक्शन को परिभाषित किया है:

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 कमांड विफल नहीं हो जाता। यह सुंदर नहीं है; वास्तव में स्टडआउट फ़ाइल को नजरअंदाज कर दिया गया है और इसे केवल उस / देव / शून्य पर पुनर्निर्देशित किया जाना चाहिए। काम करता है, यद्यपि। और फिर आप स्क्रिप्ट में बाद में "शांत_गत धक्का" आदि कर सकते हैं।


10
@ThomasEdwards देखें, तो बेहतर है
रॉबिन विंसलो

240

आप उपयोग कर सकते हैं --quietया -q, जिसे अन्य Git कमांड के लिए भी उपयोग किया जा सकता है:

git commit --quiet
git push --quiet

2
मैं इस तरह से चुप नहीं कर सकता। यह या तो झंडे की उपेक्षा करता है।
गैरीबिशप

8
कमांड के बाद आपको इसे जोड़ना होगा। git pull -qया git push origin master --quiet। मैं
x

7
@ मंधक, काम नहीं करता (कम से कम यह चुप नहीं है)। जैसे git pull -q origin master > /dev/null"कुल 4 (डेल्टा 3), पुन: उपयोग किए गए 4 (डेल्टा 3)" पैदावार। यह 2.0.1 git के साथ है।
मैथ्यू फ्लेशेन

3
यहां तक ​​कि --queit (या -q) का उपयोग करते समय, यह अभी भी कुछ आउटपुट प्रिंट करता है। उदाहरण के लिए, git चेकआउट -q (ब्रांच_नाम) का उपयोग करते समय, यदि यह पहली बार है जब शाखा की जाँच की जा रही है, तो यह संदेश को यह कहते हुए प्रिंट करेगा कि नई शाखा सेटअप हो गई है। क्या कोई ऐसा (कुछ ध्वज) है जिसका उपयोग करके ऐसे सभी आउटपुट को खामोश किया जा सकता है?
अंकुर

6
यदि आप वास्तव में NO आउटपुट चाहते हैं , तो उपयोग करें git command >/dev/null 2>&1। यह दोनों stdout और stderr को / dev / null में रीडायरेक्ट करता है। --quietविकल्प के लिए संक्षिप्त उत्पादन पैदा कर रहे हैं, पूरी तरह से @Ankur उत्पादन को दबाने के लिए नहीं
ब्रैंडन

17

&> /dev/nullअंत में उपयोग करने से आपको पूरी तरह से चुप रहने वाला कमांड आउटपुट मिलता है।

git fetch origin master &> /dev/null

1
केवल csh में, अधिकांश बोर्न शेल का उपयोग करके शेल स्क्रिप्टिंग करने की सलाह देते हैं।
एचडी 1

@ hd1 नहीं, &>एक बैश IO पुनर्निर्देशक ऑपरेटर है। 3.6 यहाँ देखें tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
हंस क्रिश्चियन

@HansKrisian हाँ, bash ने csh से इंटरैक्टिव फीचर और स्क्रिप्टिंग को sh से एक साथ लाया। उसी हॉव्टो से उद्धृत करते हुए: "बैश एक श-संगत शेल है जो कॉर्न शेल (ksh) और सी शेल (csh) से उपयोगी विशेषताओं को शामिल करता है"।
221

1
उद्देश्य सूचना संदेशों को दूर करना है, लेकिन फिर भी त्रुटियों को प्रदर्शित करता है। मैंने इस बात का अध्ययन नहीं किया है कि स्टडआउट में क्या जाता है और स्टडर के पास क्या जाता है, इसके बारे में अच्छी तरह से व्यवहार किया जाता है, लेकिन दोनों को एक बहुत ही बुरे विचार की तरह गंध आती है।
जोहान बोले

6

ध्यान दें कि इसके साथ भी --quiet, git fetch(जो ट्रिगर करता है git gc) कुछ आउटपुट उत्पन्न करेगा।
इस वजह से इसका git gcहिस्सा है git fetch

अब नहीं, जीआईटी 2.1.1 (सेप्ट 2014) शुरू करना: न्ग्येन थिए न्ग्यु जुय ( ) से 6f33eaea59d747c160972c67663e8b8c281229 कमिट देखें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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.