दिलचस्प पोस्ट
एज़ुर वेब साइट और एक नीला वेब रोल के बीच अंतर क्या है रन टाइम पर गतिशील रूप से डीएलएल विधानसभा उत्पन्न करना मैं कैसे जांच सकता हूँ कि कोई स्क्रॉलबार दिखाई दे रहा है? X 86 COM से x64 .NET एक्सेस करें कैश-कंट्रोल के बीच अंतर क्या है: अधिकतम-आयु = 0 और नो-कैश? मुझे ऑब्जेक्ट के बजाय एक संकेतक का उपयोग क्यों करना चाहिए? दो-तरफ़ा एन्क्रिप्शन: मुझे ऐसे पासवर्ड संग्रहीत करने की आवश्यकता होती है जिन्हें पुनर्प्राप्त किया जा सकता है जावा पर बारकोड स्कैनर कार्यान्वयन घोषित गुणों के लिए डॉट नोटेशन बनाम संदेश नोटेशन संरचना निर्माता: "कॉलर को नियंत्रण से पहले फ़ील्ड पूरी तरह असाइन किया जाना चाहिए।" jQuery.parseJSON एकल बोली बनाम डबल उद्धरण टेक्स्ट-टू-स्पीच (वॉयस पीढ़ी) और भाषण टू टेक्स्ट (आवाज मान्यता) एपीआई? पायथन में ''> 0 सच क्यों है? जावास्क्रिप्ट रेगेक्स में एक मनमानी समूहों की संख्या कैसे कैप्चर करें? जावास्क्रिप्ट स्ट्रिंग और संख्या रूपांतरण

गीट पूर्व-प्रतिबद्ध हुक: परिवर्तित / जोड़े गए फ़ाइलें

मैं एक पूर्व-प्रतिबद्ध हुक लिख रहा हूँ मैं .php एक्सटेंशन के साथ सभी फाइलों के खिलाफ php -l को चलाने के लिए चाहता हूँ हालांकि मैं फंस गया हूँ

मुझे नये / बदली हुई फाइलों की एक सूची प्राप्त करने की ज़रूरत है हटाई गई फ़ाइलों को बाहर रखा जाना चाहिए।

मैंने git diff और git ls-files का प्रयोग करने की कोशिश की है, लेकिन मुझे लगता है कि मुझे यहाँ एक हाथ की आवश्यकता है।

वेब के समाधान से एकत्रित समाधान "गीट पूर्व-प्रतिबद्ध हुक: परिवर्तित / जोड़े गए फ़ाइलें"

git diff --cached --name-status क्या चरणबद्ध है का सारांश दिखाएगा, ताकि आप निकाली गई फ़ाइलों को आसानी से बाहर कर सकें, जैसे:

 M wt-status.c D wt-status.h 

यह इंगित करता है कि wt-status.c संशोधित किया गया था और wt-status.h को स्टेजिंग क्षेत्र (इंडेक्स) में हटा दिया गया था। इसलिए, केवल उन फ़ाइलों को चेक करने के लिए जिन्हें निकाला नहीं गया था:

 steve@arise:~/src/git <master>$ git diff --cached --name-status | awk '$1 != "D" { print $2 }' wt-status.c wt-status.h 

यद्यपि रिक्त स्थान के साथ फ़ाइल नामों से निपटने के लिए आपको अतिरिक्त हुप्स के माध्यम से कूदना होगा (यद्यपि git diff के लिए -z विकल्प और कुछ और दिलचस्प पार्सिंग)

एक ही सूची प्राप्त करने का एक थोड़ा सा तरीका है:

 git diff --cached --name-only --diff-filter=ACM 

यह उन फाइलों की सूची वापस करेगा जो चेक किए जाने की आवश्यकता है।

लेकिन सिर्फ अपने कार्यशील प्रतिलिपि में php -l चलाना ठीक नहीं हो सकता है। यदि आप आंशिक प्रतिबद्ध हैं यानी आपके चालू कार्यसमूह और सिर के लिए प्रतिबद्ध के बीच के मतभेदों का एक सबसेट चुनना है, तो परीक्षा आपके काम के सेट पर चलाई जाएगी, लेकिन एक प्रतिबद्धता प्रमाणित होगी जो आपके अस्तित्व में कभी भी अस्तित्व में नहीं है डिस्क।

इसे ठीक करने के लिए आपको पूरे स्टेज छवि को अस्थायी क्षेत्र में निकालना चाहिए और वहां परीक्षण करना चाहिए।

 rm -rf $TEMPDIR mkdir -p $TEMPDIR git checkout-index --prefix=$TEMPDIR/ -af git diff --cached --name-only --diff-filter=ACM | xargs -n 1 -I '{}' \bin\echo TEMPDIR/'{}' | grep \\.php | xargs -n 1 php -l 

एक अन्य कार्यान्वयन के लिए जीआईटी के लिए एक बेहतर पूर्व-प्रतिबद्ध हुक बिल्डिंग देखें।

मेरे पर्ल चेक के लिए मैं इसका उपयोग करता हूं:

 git diff --cached --name-status | while read st file; do # skip deleted files if [ "$st" == 'D' ]; then continue; fi # do a check only on the perl files if [[ "$file" =~ "(.pm|.pl)$" ]] && ! perl -c "$file"; then echo "Perl syntax check failed for file: $file" exit 1 fi done 

PHP के लिए यह इस तरह दिखेगा:

 git diff --cached --name-status | while read st file; do # skip deleted files if [ "$st" == 'D' ]; then continue; fi # do a check only on the php files if [[ "$file" =~ ".php$" ]] && ! php -l "$file"; then echo "PHP syntax check failed for file: $file" exit 1 fi done 

यहां कोई भी रिक्त स्थान के साथ फाइलनामों का समर्थन नहीं किया गया है। उस के लिए सबसे अच्छा तरीका xargs -0 साथ संयोजन में -z फ्लैग जोड़ना है

 git diff --cached --name-only --diff-filter=ACM -z | xargs -0 ... 

यह है कि अंतर्निहित नमूनों में git द्वारा दिया गया है (देखें गीट / हुक / प्री-कमिट। नमूना )

git diff -cached पर्याप्त नहीं है अगर कमांड कॉल को -a ध्वज के साथ निर्दिष्ट किया गया था, और निर्धारित करने का कोई तरीका नहीं है कि हुक में ध्वज फेंका गया है या नहीं। यह मदद करता है अगर तर्क को परीक्षा के लिए हुक के लिए उपलब्ध होना चाहिए।