mercurial - क्या मैं एक मरकरी रिपॉजिटरी का हिस्सा क्लोन कर सकता हूं?




dvcs (5)

क्या मर्क्यूरियल रिपॉजिटरी का हिस्सा क्लोन करना संभव है? मान लीजिए कि रिपॉजिटरी काफी बड़ी है, या इसमें कई परियोजनाएं, या कई शाखाएं हैं। क्या मैं रिपॉजिटरी के केवल भाग को क्लोन कर सकता हूं?

उदा। तोड़फोड़ में, आपके पास trunk और branches हो सकती हैं। अगर मैं केवल ट्रंक (या शाखाओं में से एक) प्राप्त करना चाहता हूं, तो मैं केवल अनुरोध कर सकता हूं [project]/trunk । अगर मैं hg repo को क्लोन करता हूं तो मुझे ट्रंक और सभी शाखाएं मिलेंगी। यह बहुत सारी जानकारी हो सकती है जो मैं नहीं चाहता। क्या मैं इसे पाने से बच सकता हूं?

वैकल्पिक रूप से, अगर मुझे एक hg रेपो में कई परियोजनाएं करनी हैं, तो मुझे यह कैसे करना चाहिए? यानी कि मैं सिर्फ एक परियोजना प्राप्त कर सकता हूं और दूसरों की उपेक्षा कर सकता हूं।


@ निक ने कहा:

"यह एक बहुत बड़ी चूक है क्योंकि बहुत से होस्टिंग साइटें केवल एक रेपो की पेशकश करती हैं। svn के साथ मैं प्रभावी रूप से कई रिपोज हो सकता हूं क्योंकि मैं मुख्य एक से केवल एक शाखा लेकर चाहता हूं। एक हैक की तरह सब्रेपोज साउंड।"

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

उदाहरण के लिए:

hg init
hg branch project-1
# Changes, commits, repeated as needed
hg update null
hg branch project-2
# Changes, commits, repeated as needed

अब आप अपनी सभी परियोजनाओं को देख सकते हैं:

> hg branches
project-2                      5:42c2beffe780
project-1                      2:43fd60024328

परियोजनाएं असंबंधित हैं (हालांकि आप उन्हें मर्ज कर सकते हैं):

> hg debugancestors
-1:000000000000 

सबसे उपयोगी: आप केवल उस परियोजना को क्लोन कर सकते हैं जिसे आप चाहते हैं, और अन्य इसमें मिश्रण नहीं करेंगे:

> hg clone <repository> -r project-1

इसके लिए ग्राफ कुछ इस तरह दिखाई देगा ( hg log -qG ):

@  5 | project-2 | {tip}
|
o  4 | project-2
|
o  3 | project-2

o  2 | project-1
|
o  1 | project-1
|
o  0 | project-1

आप जितनी जरूरत हो उतनी परियोजनाओं के लिए यह कर सकते हैं, प्रत्येक को hg branches साथ सूचीबद्ध कर सकते हैं, और hg update साथ उनके बीच कूद सकते हैं। यह कुछ ध्यान रखता है, क्योंकि नामित शाखा समर्थन परिपूर्ण नहीं है। यह हमेशा एक चीज़ के लिए सहज नहीं होता है (मर्क्यूरियल 1.4 में hg clone -u बारे में पढ़ें - पूर्व-1.4 का व्यवहार क्लोनिंग के दौरान आश्चर्यजनक है)। लेकिन यह काम करता है


@Nick

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

पूर्ण रूप से। बस hg clone -r <branch> उपयोग करें और केवल वही शाखा प्राप्त करें जो आप चाहते हैं। यदि आपके पास बहुत सी शाखाएँ हैं, तो आपको प्रत्येक के लिए -r <branch> आवश्यकता होगी। <branch> नाम एक शाखा नहीं होना चाहिए: आपके पास बस कई अनाम सिर हो सकते हैं (या बुकमार्क का उपयोग करके नामांकित सिर, हालांकि वे अभी भी परिपूर्ण नहीं हैं, क्योंकि वर्तमान में वे पुश / पुल / क्लोन के साथ नहीं दिखाते हैं) ।

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


मर्क्यूरियल और गिट केवल संपूर्ण रिपॉजिटरी पर क्लोनिंग की अनुमति देते हैं। इस प्रकार यह अनुशंसा की जाती है कि प्रत्येक परियोजना का अपना भंडार हो।

मर्क्यूरियल में प्रोजेक्ट रिपॉजिटरी के लिए "फॉरेस्ट" होने को कम करने के लिए ForestExtension है। एक्सटेंशन प्रत्येक प्रोजेक्ट को एक अलग रिपॉजिटरी में रखता है, लेकिन सभी वन रिपॉजिटरी को एक साथ अपडेट / पुश / पुल करने का विकल्प प्रदान करता है।


मुझे पता है कि इस सवाल के पूछे जाने के लगभग 10 साल बाद, II दुर्घटना से इस सवाल पर लड़खड़ा गया।

एक नया व्यापारिक विस्तार कॉल विरल है जो आपको ऐसा करने की अनुमति देता है।


हाँ तुम कर सकते हो। मुझे यकीन है कि आप आगे बढ़ गए हैं, लेकिन उन लोगों के लिए जो बाद में यहां भटकेंगे, मैंने ConvertExtension पर डॉक्स का ConvertExtension , और एक साधारण बैच स्क्रिप्ट लिखी:

@echo off
echo Converting %1
REM Create the file map
echo include %1 > ~myfilemap               
echo rename %1 . >> ~myfilemap 
REM Run the convert process
hg convert --filemap ~myfilemap .\ ..\%1   
REM Delete the file map
del ~myfilemap                             
cd ..\%1
REM update the new repo--to create the files
hg update                                  

इसे split.cmd तरह कुछ नाम दें। split.cmd , और इसे उस रेपो के लिए निर्देशिका में रखें जिसे आप विभाजित करना चाहते हैं। उदाहरण के लिए कहें कि आपके पास C:\repos\ReallyBigProject , और एक सबफ़ोल्डर C:\repos\ReallyBigProject\small-project । कमांड प्रॉम्प्ट पर, रन:

cd\repos\ReallyBigProject
split.cmd small-project

यह बड़ी परियोजना से संशोधन के प्रासंगिक इतिहास के एक टुकड़े के साथ C:\repos\small-project परियोजना का निर्माण करेगा।

डिफ़ॉल्ट रूप से convert सक्षम नहीं है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि निम्न पंक्तियाँ आपके .hg\hgrc फ़ाइल में मौजूद हैं ( c:\repos\ReallyBigProject\.hg\hgrc मेरे उदाहरण में):

[extensions]
hgext.convert=




dvcs