2009-10-17 13 views
29

जो भी वीसीएस मैं उपयोग कर रहा हूं, उसके बारे में चिंता करने के लिए मैं किस व्यवसाय का उपयोग कर रहा हूं? मुझे यह नहीं मिला कि यहां क्या बिंदु है। गिट संस्करण नियंत्रण या वाक्यविन्यास परीक्षक है?मेरी फाइलों में पिछली जगहों के बारे में गिट की देखभाल क्यों करती है?

+0

भी देखें http://stackoverflow.com/a/30803980/6309, "पुराने" खाली स्थान के पिछले द्वारा शुरू की त्रुटि के बीच अंतर करने को देखने के प्रतिबद्धता, और नए, अगले प्रतिबद्धता के लिए वर्तमान चरणबद्ध कोड द्वारा पेश किया गया। – VonC

उत्तर

28

ऐसा इसलिए है क्योंकि गिट के लिए बहुत आम उपयोग ईमेल के माध्यम से पैच श्रृंखला भेज रहा है। पिछली जगहों में ईमेल में परेशानी होती है, और इस प्रकार आमतौर पर छीन लिया जाता है, जिसका अर्थ यह है कि ईमेल के माध्यम से पैच भेजने और इसे लागू करने की प्रक्रिया में कोई पिछली जगह खो जाएगी। बदले में इसका मतलब है कि यदि रेपो में लाइनों पर पिछली जगहें हैं, लेकिन पैच में लागू नहीं किया जा रहा है, तो आपको पैच लगाने के दौरान नकली संघर्ष, या अतिरिक्त परिवर्तनों का इरादा नहीं मिल सकता है।

यह प्री-प्रतिबद्ध हुक डिफ़ॉल्ट रूप से सक्षम किया जाता था, लेकिन अब नहीं है। ऐसा लगता है कि मैंने गलत समझा है; 10। जैसा कि अन्य ने बताया है, यह हमेशा नमूना प्री-प्रतिबद्ध हुक रहा है; इसे निष्पादित बिट नहीं देकर इसे अक्षम किया जाता था, लेकिन ऐसा कुछ ऐसा है जो काफी आसानी से खराब हो सकता है (उदाहरण के लिए, विंडोज़ पर सिग्विन के तहत चल रहा है), इसलिए गिट के नए संस्करणों में (over a year ago से) नमूने अक्षम कर दिए गए हैं pre-commit.sample नामित किया जा रहा है। यदि आप व्यवहार पसंद नहीं करते हैं तो इस हुक को निष्पादित करने से रोकने के लिए आप अपने .git/hooks/pre-commit को हटा या स्थानांतरित कर सकते हैं। आपको अपने गिट को हाल ही में कुछ और अपडेट करना चाहिए, क्योंकि यह थोड़ी देर के लिए तय किया गया है।

+0

यह बेवकूफ है कि यह डिफ़ॉल्ट रूप से सक्षम था। वास्तव में बेवकूफ। –

+8

यह ** डिफॉल्ट ** द्वारा सक्षम नहीं है। – hobbs

+2

मेरी माफ़ी; मुझे इस तथ्य से गलती हुई कि मुझे कई बार इसकाट दिया गया था, लेकिन मुझे अब एहसास हुआ कि यह हमेशा सिगविन के अधीन था। –

11

गिट बिल्कुल परवाह नहीं करता है। उदाहरण प्री-प्रतिबद्ध हुक एक हुक लिखने के प्रदर्शन के रूप में एक व्हाइटस्पेस चेक करता है, लेकिन यह डिफ़ॉल्ट रूप से सक्षम नहीं है; आपको इसे करने के लिए इसे निष्पादन योग्य बनाना होगा।

3

जैसा कि हॉब्स ने लिखा था, नमूना प्री-प्रतिबद्ध हुक पिछला सफेद स्थान के लिए एक जांच कर सकता है। इसे अक्षम करने के लिए, .git/hooks देखें और सुनिश्चित करें कि वहां फाइलें निष्पादन योग्य नहीं हैं।

हुक संभवतः प्राप्त करने का एक संभावित तरीका यह है कि निष्पादन योग्य बिट हो सकता है यदि आप अपने रेपो को एक एफएटी-स्वरूपित फ्लैश ड्राइव पर ले जा रहे हों।

+0

यही कारण है कि नए रिलीज़ में नमूना हुक निष्पादन योग्य अनुमतियों के बजाय '। नमूना' प्रत्यय का उपयोग कर रहे हैं। –

4

क्यों? चूंकि पीछे की जगह सफेद जगह आसानी से खो जाती है, जिससे नकली परिवर्तन और लागू पैच नहीं होते हैं (व्हाइटस्पेस परिवर्तन की वजह से)। यह प्रोग्रामिंग शैली के अनुरूप होने का विषय है।

यह कहा गया कि यह pre-commithook का प्रश्न है: आप इसे संपादित कर सकते हैं, या इसे अक्षम कर सकते हैं, या ट्रेलिंग व्हाइटस्पेस (शायद कुछ प्रकार की फाइलों के लिए) को कॉन्फ़िगर कर सकते हैं ताकि त्रुटि नहीं माना जा सके।


pre-commit हुक विकलांगडिफ़ॉल्ट द्वारा, लेकिन पुराने संस्करणों (पूर्व 1.6.0) उन्हें निष्पादन योग्य अनुमतियों होने से बंद कर दिया बंद कर दिया स्थापित करने के लिए प्रयोग किया जाता है, गैर पर काम नहीं हो सकता है किया जाना चाहिए -एएनआईक्स फाइल सिस्टम जैसे एफएटी; 1.6.0 से वे '। नमूना' प्रत्यय संलग्न करके बंद (अक्षम) स्थापित हैं।

+1

हाँ अच्छी तरह से मुझे कुछ गिट डेवलपर की आवश्यकता नहीं है जो मुझे बताती है कि वह क्या सोचती है या वह अच्छी प्रोग्रामिंग शैली है, मुझे अनुरूप होना चाहिए। अगर मुझे jslint की तरह कुछ चाहिए, तो मुझे jslint की तरह कुछ मिल जाएगा। मैं नहीं चाहता कि मेरा वीसीएस ऐसा करे, वह बेवकूफ है। अगर गिट में नकली बदलावों के साथ कोई समस्या है, और लागू पैच नहीं है, तो यह जीआईटी के साथ एक समस्या है, न कि मेरा कोड। –

+0

यह ** डिफॉल्ट ** द्वारा सक्षम नहीं है। – hobbs

+0

@apphacker: डिफॉल्ट प्री-प्रतिबद्ध हुक द्वारा उपयोग किए जाने वाले चेक लगभग * ईमेल के माध्यम से पैच भेज रहे हैं, प्रोग्रामिंग शैली के बारे में बहुत कुछ नहीं। –

0

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

कैसे?

कल्पना कीजिए कि आप इस तरह की एक पंक्ति है:

puts "Hello World"^M^M^M 

कहाँ प्रत्येक "^ एम" है एक पिछली श्वेत रिक्ति (वहाँ डाल सरल करने के लिए)।

एक और डेवलपर गलती से यह करने के लिए की तरह इस परिवर्तन:

puts "Hello World"^M^M 

VCS एक बदलाव के रूप में देखते होंगे। एक बेकार व्यक्ति जो कोड के साथ हस्तक्षेप नहीं करता है, लेकिन एक बदलाव। इस प्रकार के परिवर्तन को वीसीएस द्वारा एक संघर्ष के रूप में भी इंगित किया जा सकता है (जो कुछ भी हो सकता है जिसे जब भी संभव हो से बचा जाना चाहिए)। इसके अलावा, यह बिना किसी आवश्यकता के आपके इतिहास को प्रदूषित करता है।

संबंधित मुद्दे