पूर्व-निर्धारित हुक को केवल तभी निष्पादित करें जब कुछ निर्देशिका में फाइलें संशोधित हों


11

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

SRC_PATTERN="site/assets/js/"
if [ grep --quiet $SRC_PATTERN `git diff --cached --name-only` ]
then
  echo "none"
  exit 0
fi

यह दुर्भाग्य से मुझे त्रुटियाँ दे रहा है।

जवाबों:


9

प्रयत्न,

git diff --cached --name-only | if grep --quiet "$SRC_PATTERN"
then
    ...

हैप्पी हैकिंग


8

इसे इस तरह आज़माएं:

SRC_PATTERN="site/assets/js/"
if git diff --cached --name-only | grep --quiet "$SRC_PATTERN"
then
  echo "none"
  exit 0
fi

यह स्वीकृत उत्तर की तरह दिखता है, लेकिन यह गलत है। Bash / sh में एक पाइप लाइन में प्रत्येक कमांड को एक अलग सबशेल में निष्पादित किया जाता है, इसलिए तत्कालीन भाग में एक निकास केवल सबस्लेम से बाहर निकलेगा, जो भी फाई का अनुसरण करता है उसे अभी भी निष्पादित किया जाएगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.