में किए जाने वाले कार्यों का परीक्षण करना इंटरनेट इस प्रश्न के गलत और गैर-आदर्श उत्तरों से पूरी तरह से परेशान है। यह दुर्भाग्यपूर्ण है क्योंकि आपको लगता है कि यह एक आम बात होगी जो आप करना चाहते हैं।प्री-प्रतिबद्ध हुक
समस्या: जब pre-commit
हुक चलाता है, तो भंडार साफ नहीं हो सकता है। इसलिए यदि आप अपने परीक्षणों को नैतिक रूप से चलाते हैं, तो वे आपके द्वारा किए जा रहे कार्यों के खिलाफ नहीं होंगे, लेकिन आपके काम करने वाले पेड़ में जो भी गंदगी होती है।
करने के लिए स्पष्ट बात pre-commit
और git pop
निकास पर के शुरू में git stash --keep-index --include-untracked
है। इस तरह आप (शुद्ध) इंडेक्स के खिलाफ परीक्षण कर रहे हैं, जो हम चाहते हैं।
दुर्भाग्य से, इस संघर्ष मार्करों विलय अगर आप git add --patch
उपयोग करते हैं, (विशेष रूप से आप जिसे संपादित करते हैं), के बाद से [email protected]{0}
की सामग्री काम पेड़ के खिलाफ मेल नहीं खा सकते बाद प्रतिबद्ध उत्पन्न करता है।
एक और आम समाधान भंडार को क्लोन करना और परीक्षण को एक नए अस्थायी में चलाने के लिए है। इसके साथ दो मुद्दे हैं: एक यह है कि हमने अभी तक प्रतिबद्ध नहीं किया है, इसलिए हम उस राज्य में रिपोजिटरी की एक प्रति आसानी से प्राप्त नहीं कर सकते हैं, जिसे हम प्रतिबद्ध करने वाले हैं (मुझे यकीन है कि ऐसा करने का एक तरीका है , लेकिन मुझे दिलचस्पी नहीं है क्योंकि :)। दूसरा, मेरे परीक्षण वर्तमान कार्यशील निर्देशिका के स्थान के प्रति संवेदनशील हो सकते हैं। उदाहरण के लिए स्थानीय पर्यावरण विन्यास की वजह से।
तो: मैं अपने कार्य-पेड़ को git stash --keep-index --include-untracked
से पहले जो भी स्थिति में विलय विवाद मार्कर शुरू किए बिना, और पोस्ट-प्रतिबद्ध HEAD
को संशोधित किए बिना कैसे कर सकता हूं?
स्क्रिप्ट पूर्व प्रतिबद्ध डेटा प्राप्त इनपुट के रूप में प्रतिबद्ध जा रहा है। आपको किसी और चीज को देखने की ज़रूरत क्यों है? शायद आप जो करने की कोशिश कर रहे हैं वह पूर्व-प्रतिबद्ध हुक के अलावा किसी अन्य चीज़ में किया जाएगा। आप किस तरह के परीक्षण करना चाहते हैं जिसके लिए पूर्ण भंडार तक पहुंच की आवश्यकता है? –
@ विलियमपर्सेल: "डेटा प्रतिबद्ध होने" से आपका क्या मतलब है? प्री-स्क्रिप्ट स्क्रिप्ट मेरे काम के पेड़ में चलती है (यानी, स्रोत भंडार का आधार)। समस्या यह है कि यदि आप भंडार में कुछ बदलाव करते हैं और केवल उनमें से कुछ को चरणबद्ध करते हैं (उदाहरण के लिए, आप कुछ फाइलें जोड़ते हैं लेकिन दूसरों को नहीं), तो आप ऐसा होने से पहले प्रतिबद्धता का परीक्षण नहीं करेंगे (मैं क्या करना चाहता हूं) आप अपनी कार्यशील निर्देशिका में जो भी हो, उसका परीक्षण करेंगे। – pwaller
जो पैच आप कर रहे हैं वह पूर्व-प्रतिबद्ध हुक में stdin पर उपलब्ध है। यदि पैच किया जा रहा है तो क्या आप परीक्षण कर रहे हैं? पूर्व-प्रतिबद्ध हुक का उद्देश्य पैच को सत्यापित करना है। –