DVcs - "क्लोन टू ब्रांच" एक सामान्य वर्कफ़्लो है?


9

मैं हाल ही में एक सहकर्मी के साथ DVcs पर चर्चा कर रहा था, क्योंकि हमारा कार्यालय टीएफएस (हम एक एमएस की दुकान हैं) से स्विच करने पर विचार करने लगे हैं। इस प्रक्रिया में, मैं बहुत भ्रमित हो गया क्योंकि उसने कहा कि हालांकि वह मर्क्यूरियल का उपयोग करता है, उसने "शाखा" या "चेकआउट" कमांड के बारे में नहीं सुना था, और ये शब्द उसके लिए अपरिचित थे। यह सोचने के बाद कि यह कैसे संभव है कि वह उनके बारे में नहीं जानता था और यह बताते हुए कि आपकी स्थानीय फाइलों पर "जगह" में डीवीसीएस शाखाएं कैसे काम करती हैं, वह काफी उलझन में था।

उन्होंने समझाया कि, TFS कैसे काम करता है, इसके समान, जब वह "शाखा" बनाना चाहता है, तो वह क्लोन करके करता है, इसलिए उसके पास अपने रेपो की एक पूरी प्रति होती है। यह मेरे लिए वास्तव में अजीब लग रहा था, लेकिन लाभ, जिसे मुझे स्वीकार करना होगा, यह है कि आप एक साथ दो शाखाओं पर देख सकते हैं या काम कर सकते हैं क्योंकि फाइलें अलग हैं।

इस साइट को खोजने के लिए यह देखने के लिए कि क्या यह पूछे जाने से पहले मैंने एक टिप्पणी देखी थी कि कई ऑनलाइन संसाधन इस "क्लोन टू ब्रांच" पद्धति को बढ़ावा देते हैं, पोस्टर के विघटन के लिए। यह वास्तव में dvcs समुदाय में आम है? और क्या इस तरह से जाने के कुछ पेशेवरों और विपक्ष हैं? मैं ऐसा कभी नहीं करूंगा क्योंकि मुझे एक साथ कई शाखाओं को देखने की कोई आवश्यकता नहीं है, स्विचिंग तेज है, और मुझे अपनी डिस्क को भरने वाले सभी क्लोन की आवश्यकता नहीं है।


7
यह सीवीएस और एसवीएन वर्कफ़्लोज़ पर एक पकड़ है, याद रखें "एक हथौड़ा की तरह सब कुछ एक नाखून जैसा दिखता है"

1
@JarrodRoberson - केवल तभी जब आप अपने आप को gitकाम करने के तरीके के लिए विवश करते हैं । इसके साथ hgआमतौर पर सिखाया जाने वाला पहला वर्कफ़्लो है और यह अभी भी बहुत उपयोगी है।
मार्क बूथ

जवाबों:


3

दोनों शाखाओं को देखने में सक्षम होने के सामान्य लाभ / नुकसान के अलावा, मुझे लगता है कि ऐसा करने के लिए एक मर्क्यूरियल-विशिष्ट लाभ है।

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

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

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

http://mercurial.selenic.com/wiki/StandardBranching इसे और अधिक विस्तार से बताता है। यह भी ध्यान देने योग्य है कि मर्क्यूरियल 1.8 के बाद से, एक बुकमार्क ( hg bookmark) - एक अल्पकालिक शाखा के लिए एक डिस्पोजेबल नाम बनाना संभव है । बुकमार्क को धक्का दिया, खींचा जा सकता है, घुमाया जा सकता है और हटाया जा सकता है।


2
मैंने मर्क्यूरियल का ज्यादा इस्तेमाल नहीं किया है, लेकिन गिट में यह समस्या नहीं है। मैं दिन भर स्थानीय रूप से शाखा कर सकता हूं, विकसित शाखा में विलय कर सकता हूं, धक्का दे सकता हूं और किसी को भी मेरी शाखा के नामों पर गौर नहीं करना होगा।
एंड्रयू टी फिनेल

3
@AndrewFinnell: यह वास्तव में सवाल में फिट नहीं था, लेकिन मैं यह कहना चाहता था कि यह जरूरी नहीं है कि समस्या हो - मर्क्यूरियल काम में शाखाओं के नाम से कुछ फायदे भी हैं। उदाहरण के लिए, आप देख सकते हैं कि मूल रूप से किस शाखा पर कमिट किया गया था, जिसे जानना उपयोगी हो सकता है।
बेंज

1
@AndrewFinnell - नामांकित शाखाएं कुछ ऐसी हैं जिन्हें मैं वास्तव में याद करता हूं git, जिनके लिए उनकी आदत हो गई है hg। अनाम शाखा के स्वत: सृजन की git branchतुलना में, स्पष्ट रूप से हर बार मुझे याद रखना चाहिए कि मैं एक शाखा बनाना चाहता हूं जो कष्टप्रद है hg
मार्क बूथ

आप अभी भी hg में अपनी शाखा को हटाने के लिए बंडल स्ट्रिप एक्सटेंशन का उपयोग कर सकते हैं। "चरणों" के उपयोग के माध्यम से मर्क्यूरियल इस दिनों बेहतर इतिहास संशोधन का समर्थन करता है
d45

2

जब भी आप DVCS में तकनीकी रूप से इतिहास में एक शाखा बना रहे हैं, तो हर बार जब आप इसे धन्य भंडार में वापस धकेल देते हैं तो आप इसे वापस एकीकृत कर देते हैं, यहाँ दिलचस्प हिस्सा आता है:

  • यदि किसी ने आपकी प्रतिबद्धता के दौरान कोई बदलाव नहीं किया है, तो यह डीएजी (निर्देशित चक्रीय ग्राफ) में एक शाखा की तरह नहीं दिखेगा।
  • यदि किसी और ने आपकी प्रतिबद्धता के दौरान कोई बदलाव किया है, तो यह केवल अनाम में DAG में एक शाखा की तरह दिखाई देगा

Bitbucket / github में "fork" बटन को याद रखें ?, forking को ब्रांचिंग का पर्याय माना जा सकता है, और "fork" बटन क्या आपके खाते में उस रिपॉजिटरी का सिर्फ एक क्लोन है।

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

अपने सहकर्मी को बताएं कि कैसे शाखा लगाना है , यह बहुत आसान है, यहाँ, एक ट्यूटोरियल है:

D:\>mkdir lol

D:\>cd lol

D:\lol>hg init

D:\lol>hg branch
default

D:\lol>touch lol

D:\lol>hg add lol

D:\lol>hg commit -m "lol"

D:\lol>hg branch lol
marked working directory as branch lol
(branches are permanent and global, did you want a bookmark?)

D:\lol>hg branches
default                        0:35d562fafaf2

D:\lol>echo "lol" > lol

D:\lol>hg commit -m "New lol branch"

D:\lol>hg branches
lol                            1:9384f923e78d
default                        0:35d562fafaf2 (inactive)

D:\lol>hg branch
lol

D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
default

D:\lol>hg update lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
lol

D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
default

D:\lol>hg merge lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

D:\lol>hg commit -m "lol merge"

D:\lol>hg branch
default

D:\lol>hg update lol
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branch
lol

जब आप एक ही समय में अलग-अलग शाखाओं में काम कर रहे हों , या जब आप इतिहास में एक स्थायी शाखा बनाए बिना किसी प्रयोग को आजमाना चाहते हों, तब भी "ब्रांच टू ब्रांच" समझ में आता है और तब भी इसे पहले से मौजूद ब्रांच में वापस एकीकृत किया जा सकता है। ।

मुझे व्यक्तिगत रूप से यह अभ्यास पसंद नहीं है और यदि आवश्यक हो तो शाखाएं करना और उन्हें बंद करना पसंद करते हैं। यहाँ, यह है कि आप इसे कैसे करते हैं:

D:\lol>hg branches
default                        2:46420aca1612
lol                            1:9384f923e78d (inactive)

D:\lol>hg branch
lol

D:\lol>hg commit --close-branch -m "Obai, glorious lol branch"

D:\lol>hg branches
default                        2:46420aca1612

D:\lol>hg branch
lol

D:\lol>hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

D:\lol>hg branches
default                        2:46420aca1612

D:\lol>hg branches --closed
default                        2:46420aca1612
lol                            3:4b79c577e029 (closed)

आशा है कि यह आपके डीवीसीएस शाखाकरण के संदेह को दूर करता है, यहां शाखाएं अब डरावनी नहीं हैं।


0

मैं व्यक्तिगत रूप से मेरी डिस्क को भरने वाले कोड के बारे में चिंता नहीं करूंगा ... पहला, यह सिर्फ कोड है, और दूसरा, आप अपने सभी क्लोनों को हमेशा के लिए रखने नहीं जा रहे हैं।

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


मैंने इसे बड़े पैमाने पर उत्पादन में इस्तेमाल किया है hg। कई hgरिपॉजिटरी के बीच धक्का और खींचने में सक्षम होना वास्तव में शक्तिशाली सहयोगी उपकरण हो सकता है। केवल गैर-नंगे रिपॉजिटरी से खींचने में सक्षम होने से gitइस तरह के वर्कफ़्लो के साथ आपके विकल्पों को सीमित किया जा सकता है।
मार्क बूथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.