क्यों DVCSes लगता है सभी के लिए एक तर्कहीन परिवर्तन का तर्कहीन भय है?


10

एसवीएन पृष्ठभूमि से आने वाले, डीवीसीएस सिस्टम के साथ काम करने के लिए इस्तेमाल होने वाली सबसे कठिन चीजों में से एक है, जिस तरह से वे सभी किसी भी अनपेक्षित परिवर्तन को मानते हैं जो टिक टिक टाइम बम की तरह होता है।

Mercurial में, यदि आप परिवर्तनों को लाने का प्रयास करते हैं और आपकी कार्यशील प्रतिलिपि में कोई भी परिवर्तन नहीं हुआ है, तो आपको इसे केवल आने वाले परिवर्तनों को मर्ज करने के लिए हुप्स के माध्यम से कूदना होगा। शाखाओं को स्विच करने का प्रयास करें? यह आपको सब कुछ करने के लिए मजबूर कर देगा और फिर आपको तुरंत इसे दूसरे छोर पर खोल देना होगा। (एसवीएन को इन दोनों परिदृश्यों से कोई परेशानी नहीं है।)

Git उसी तरह के बारे में है। मैं एक प्रोजेक्ट पर दूसरे डेवलपर के साथ कंधे से कंधा मिलाकर काम कर रहा हूं, और मैंने उसके कांटे को अपने कांटे में डालने का प्रयास किया। इसने मुझे जाने से मना कर दिया क्योंकि मैंने अपनी काम करने वाली प्रति में बदलावों को रद्द कर दिया है मर्ज विकल्प भी नहीं है; जाहिरा तौर पर मुझे पहले अपने बदलावों को टटोलना होगा!

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

क्या कोई तकनीकी कारण है जो इस बदलाव के बारे में इस रवैये को सही ठहराता है? और यदि हां, तो प्रश्न में समस्या केवल DVCS पर मौजूद क्यों है?


7
क्या इन बातों का पूरा मतलब यह नहीं है कि आप अपने स्थानीय शाखा में तुच्छता से जांच कर सकते हैं? अन्य डेवलपर से विलय करना फिर तीन स्रोतों (आपके संस्करण, आपके परिवर्तन, उनके संस्करण) को हल करने की कोशिश करने के बजाय एक वास्तविक मर्ज बन जाता है। मैं हालांकि इस क्षेत्र का कोई विशेषज्ञ नहीं हूं, इसलिए इसका आधार नहीं हो सकता।
तेलस्टिन

3
मैं टेलस्टाइन से सहमत हूं। मुझे लगता है कि आप जिस कारण से अतार्किक प्रतिबंधों का सामना कर रहे हैं, वह यह है कि आप एक मुहावरेदार तरीके से गिट का उपयोग नहीं कर रहे हैं। गिट की एक प्रमुख ताकत यह है कि आप स्थानीय स्तर पर प्रतिबद्ध हो सकते हैं। अगर मुझे किसी और के कोड को अपनी कार्यशील प्रतिलिपि में विलय करना पड़ा, तो मुझे यकीन है कि नरक पहले स्थानीय रूप से प्रतिबद्ध होगा। स्थानीय आवागमन सस्ते हैं, साफ-सफाई में आसान है और एक अद्भुत सुरक्षा जाल है। मुझे आश्चर्य नहीं है कि Git वर्कफ़्लो इसके चारों ओर घूमता है (और फलस्वरूप चेतावनी और प्रतिबंध यह मान लेते हैं कि आप बिना फ़ाइलों के काम के बजाय प्रतिबद्ध होंगे)।
मेटाफाइट

3
@ टेलस्टाइन: नहीं, आप नहीं कर सकते, क्योंकि एक चेकइन - यहां तक ​​कि आपकी स्थानीय शाखा को भी - एक प्रतिबद्ध कारण की आवश्यकता होती है और इतिहास में एक रिकॉर्ड बनाता है। इसलिए यदि आप किसी ऐसी चीज की जांच करते हैं जो अभी तक प्रतिबद्ध होने के लिए तैयार नहीं थी, तो आखिरकार जब आप दूरस्थ रिपॉजिटरी में बदलावों को आगे बढ़ाने के लिए तैयार होते हैं, तो वह इतिहास तब तक होने वाला है जब तक आप इतिहास को फिर से लिखने के लिए अतिरिक्त संचालन से नहीं गुजरते। यह मेरे द्वारा पहचाने जाने वाले "तुच्छ" की किसी भी परिभाषा में फिट नहीं है, और यह मुझे बिना किसी कलात्मक लाभ के बहुत अधिक अतिरिक्त जटिलता की तरह लगता है।
मेसन व्हीलर

वास्तव में? "मुख्य से विलय के लिए स्थिर XYZ" कुछ बोझ है, या अत्यधिक विनम्र इतिहास के लिए जा रहा है?
तेलस्टिन

1
क्या आप स्पष्टता के लिए कम से कम संपादन के बिना प्रकाशन के लिए एक पेपर प्रस्तुत करेंगे? फिर प्रकाशन के लिए अपनी पहली ड्राफ्ट कमिट सीरीज़ जमा न करें। हर कोई जो आपके कोड को एक बड़ा एहसान पढ़ेगा: वापस जाएं और आपके द्वारा लिखी गई श्रृंखला का निर्माण करें यदि आपके पास पहली जगह में ऐसा करने की दूरदर्शिता थी। इंटरएक्टिव
रिबास

जवाबों:


4
  1. डीवीसीएस-दुनिया में आवागमन सस्ते होते हैं और इतिहास परिवर्तनशील होता है। WIP आप के रूप में "गंदा" हो सकता है, जैसा कि आप चाहते हैं: और मैं किसी भी कारण के खिलाफ "परिवर्तन में अपने वर्तमान राज्य को रोकने के लिए" को रोक नहीं सकता
  2. एसवीएन इतिहास रैखिक है, इस प्रकार - आपको नए संशोधनों से परिवर्तन के साथ ड्राफ्ट को मर्ज करना होगा । डीवीसीआर का उपयोग (स्वाभाविक रूप से) डीएजी, और डायवर्ट किए गए इतिहास के लिए अतिरिक्त सिर (कम + पुल + अप) सुरक्षित बाहरी परिवर्तनों के साथ काम कर रहे उड़ने वाले संशोधित डीआईआर में विलय की तुलना में सुरक्षित है।
  3. जब आप स्विच ( कुछ नोड में ) WC को सबवर्सन में संशोधित करते हैं, तो आपको एक संभावित अतिरिक्त मर्ज से छुटकारा मिलता है ("कमिट टू ओल्ड" - "स्विच" - "मर्ज 1 रेव। रेंज" के विपरीत) ... और हम जानते हैं: विलय। SVN टूल का सही पक्ष नहीं है, जबकि यह DVCSes के लिए बिल्कुल भी समस्या नहीं है

बायोडाटा

यह एक फोबिया नहीं है, यह (कभी-कभी कठोर) अच्छे शिष्टाचार का पालन करने के लिए प्रवर्तन "अक्सर होता है" (एसवीएन-उपयोगकर्ता कभी-कभी इस शैली से डरते हैं)

और, अंत में, hg qnew|qpop|qpushनीरसता और व्यवस्था के लिए छोटा उचित मूल्य है


1

जब आप मर्ज करते हैं या चेरी-पिक gitकरते हैं, तो आप तुरंत एक कमिट बना रहे हैं। ऑपरेशन तब तक पूरा नहीं होता है जब तक कि कमिट खत्म न हो जाए और इतिहास का हिस्सा न हो।

अब, क्या होगा यदि gitआप अपनी कार्यशील निर्देशिका में अपने अनपेक्षित परिवर्तनों पर चमकने की अनुमति दें? आपके पास मर्ज / चेरी-पिक, और उन परिवर्तनों का ध्यान रखने की आवश्यकता है, जो बदलाव / मर्ज संघर्षों के बीच अंतर करने के लिए आपके पास (कम या ज्यादा) कठिन समय होगा। इसके अलावा, आपके लिए यह परीक्षण करना असंभव होगा कि आप वास्तव में क्या कर रहे हैं।

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

git stash
git pull
git stash pop

आपके पास दो (!) मर्ज ऑपरेशन हैं। एक जो आने वाले परिवर्तनों के साथ आपकी अंतिम प्रतिबद्ध को विलय करता है, और एक जो आपके विलय किए गए परिवर्तनों को परिणामी विलय के साथ विलय करता है। इस तरह, आपको केवल दो चीजों को एक में मिलाना होगा, इस भ्रम से बचना होगा कि इन तीन चीजों को नजरअंदाज करने की कोशिश करते हुए एक ही ऑपरेशन में तीन चीजों को एक में विलय करने की कोशिश की जाएगी। git stash/ git stash popयह आसान है और स्पष्ट है कि आप मर्ज के लिए अपने अप्रतिबद्ध परिवर्तन अनदेखी कर रहे हैं बनाता है।

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