2010-04-03 12 views
6

अक्सर पूछे जाने वाले प्रश्न, और hginit.com वास्तव में svn से hg में संक्रमण करने में मेरी सहायता के लिए उपयोगी रहा है।मर्कुरियल सब्रेपिटिटरीज बनाना उपversण बाहरीों की तरह व्यवहार करता है

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

यहाँ मैं क्या करना चाहते हैं का सबसे सरल उदाहरण है:

  1. Init "lib" भंडार यह भंडार नहीं है एक स्वसंपूर्ण के रूप में इस्तेमाल किया जाता है; इसे हमेशा उप-भंडार के रूप में मुख्य भंडारों द्वारा शामिल किया जाता है।

  2. Init एक या अधिक खजाने उदाहरण सरल रखने के लिए भी शामिल है, मैं "init" भंडार कहा जाता है "मुख्य"

  3. होगा "मुख्य" शामिल एक subrepository

  4. के रूप में "lib"

    महत्वपूर्ण रूप से - और यहां मैं क्या काम नहीं कर सकता: जब मैं "मुख्य/lib" के अंदर एक फ़ाइल को संशोधित करता हूं, और मैं संशोधन को दबाता हूं, तब उस परिवर्तन को "lib" भंडार में धक्का दिया जाता है - नहीं "मुख्य" के अंदर की एक प्रतिलिपि में।

कमांड लाइन शब्दों से ज़ोर से बोलती है। मैंने इस विषय पर इतनी सारी विविधताओं की कोशिश की है, लेकिन यहां गिस्ट है। अगर कोई जवाब दे सकता है, कमांड लाइनों में, मैं हमेशा के लिए आभारी रहूंगा!

1. Init "lib" भंडार

$ सीडी/घर/moi/hgrepos ## मुझे मेरे एचजी खजाने, भंडारण कर रहा हूँ अपने मुख्य सर्वर पर

$ एचजी init lib

$ "foo"> lib/lib.txt गूंज

$ एचजी lib जोड़ने

$ एचजी ci -एक -m "Init lib"

lib

2. Init "मुख्य" भंडार है, और शामिल एक subrepos के रूप में "lib"

$ सीडी/घर/moi/hgrepos

$ एचजी init मुख्य

$ गूंज "foo"> मुख्य/main.txt

$ एचजी lib

../lib मुख्य

$ सीडी मुख्य

$ एचजी क्लोन जोड़ने

$ echo "lib = lib"> .hgsub

$ hg ci -A -m "init main"।

यह सब ठीक काम करता है, लेकिन जब मैं "मुख्य" भंडार का क्लोन बना देता हूं, और स्थानीय " " मुख्य/lib "में फ़ाइलों में संशोधन करता हूं, और उन्हें धक्का देता है, तो परिवर्तन" मुख्य/lib " , "lib" नहीं है।

$/घर/moi/एचजी परीक्षण

$ एचजी क्लोन ssh: //[email protected]/hgrepos/

आदेश-पंक्ति-ESE में

, यह समस्या है lib lib

$ एचजी क्लोन ssh: मुख्य

$ सीडी //[email protected]/hgrepos/main मुख्य

$ गूंज foo >> lib/lib.txt

01,235,

$ एचजी सेंट

एम lib.txt

$ एचजी कॉम -m "संशोधित lib.txt, मुख्य रेपोस अंदर से"

$ एचजी धक्का

को धक्का lib.txt एसएसएच: //[email protected]/hgrepos/main/lib

एचजी से आउटपुट की आखिरी पंक्ति समस्या दिखाती है।

यह दिखाता है कि मैंने lib में फ़ाइल की एक प्रतिलिपि में संशोधन किया है, lib libository में फ़ाइल के लिए नहीं। अगर यह काम कर रहा था क्योंकि मैं इसे काम करना चाहता हूं, तो पुश hgrepos/lib होगा, hgrepos/main/lib के लिए नहीं। यानी, मैं देखना होगा:

$ एचजी धक्का

ssh करने के लिए जोर दे: //[email protected]/hgrepos/lib

आप नियम में इस उत्तर कर सकते हैं यदि

के

इंग्लैंड में कमांड लाइन रथर,

मैं पूरी तरह से ग़लत हो जाऊंगा!

अग्रिम धन्यवाद!

पोर्टलैंड

+1

एमिली में बदल गया। मेरा जवाब चुनने के बारे में कैसे? एसओ पर मदद करने में बिताए गए समय के लिए यह सामान्य इनाम है। उत्तर के आपके संशोधन आम तौर पर मेरे प्रश्न पर एक 'अपडेट' संपादन में या एक उत्तर में एक टिप्पणी में जाते हैं, न कि उत्तर में। –

+0

और वास्तव में, अपने एसएसएच: // निर्देशों को देखते हुए, आप इसे ओवरइंक कर रहे हैं। स्थानीय सबरेपो सेटअप सेट अप करने के लिए मेरे चरणों का पालन करने के बाद आप एसएसएच पर 'मुख्य' रेपो को क्लोन कर सकते हैं और मर्क्यूरियल रिमोट रेपो पर पूरे मुख्य/lib सेटअप को स्वयं खींचता है। यह सब्रेप्स का असली वादा है - एक क्लोन आपको कई घोंसले वाले रिपोज़ प्राप्त करता है। –

उत्तर

8

में एमिली समस्या अपने .hgsub फ़ाइल के साथ है। यह जहां lib रेपो है की ओर इशारा करता है, इसलिए यदि lib मुख्य करने के लिए एक भाई है यह होना चाहिए:

lib=../lib 

इसके अलावा अपने hg add lib और hg add main लाइनों मतलब नहीं है। मुख्य और lib के बाहर क्या रेपो को जोड़ा जा रहा है? /home/moi/hgrepos में आप उन्हें चला रहे हैं।

यहाँ कुछ तोड़ मरोड़ के साथ अपनी स्क्रिप्ट है: // आप की जरूरत केवल एक ही परिवर्तन करना:

+ cd /home/ry4an/hgtest 
+ hg init lib 
+ echo foo 
+ cd lib 
+ hg commit -A -m Init lib 
adding lib.txt 
+ cd /home/ry4an/hgtest 
+ hg init main 
+ echo foo 
+ cd main 
+ echo lib=../lib 
+ hg clone ../lib 
destination directory: lib 
updating to branch default 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
+ hg add .hgsub main.txt 
+ hg commit -m Init main: initial file and a .hgsub 
committing subrepository lib 
+ cd /home/ry4an/hgtest 
+ hg clone main main-clone 
updating to branch default 
pulling subrepo lib 
requesting all changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files 
3 files updated, 0 files merged, 0 files removed, 0 files unresolved 
+ cd main-clone 
+ echo foo 
+ hg commit -m Modified lib.txt, from inside the main repos 
committing subrepository lib 
+ hg push 
pushing to /home/ry4an/hgtest/main 
pushing subrepo lib 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files 

कि SSH पर ऐसा करने के लिए। मुख्य रेपो को क्लोन करते समय hg clone main main-clone से hg clone ssh://host/hgtest/main main-clone - मुख्य रूप से क्लोनिंग क्लोन को क्लोन करता है - यह उपरोक्त लाभ है।

+ cd /home/ry4an/hgtest 
+ hg init lib 
+ echo foo 
+ cd lib 
+ hg commit -A -m Init lib 
adding lib.txt 
+ cd /home/ry4an/hgtest 
+ hg init main 
+ echo foo 
+ cd main 
+ echo lib=../lib 
+ hg clone ../lib 
destination directory: lib 
updating to branch default 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
+ hg add .hgsub main.txt 
+ hg commit -m Init main: initial file and a .hgsub 
committing subrepository lib 
+ cd /home/ry4an/hgtest 
+ hg clone ssh://localhost/hgtest/main main-clone 
The authenticity of host 'localhost (::1)' can't be established. 
RSA key fingerprint is 0c:58:d6:d3:d3:16:14:ee:3b:be:01:bc:c7:3c:92:0b. 
Are you sure you want to continue connecting (yes/no)? yes 
[email protected]'s password: 
requesting all changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 3 changes to 3 files 
updating to branch default 
pulling subrepo lib 
[email protected]'s password: 
requesting all changes 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files 
3 files updated, 0 files merged, 0 files removed, 0 files unresolved 
remote: Warning: Permanently added 'localhost' (RSA) to the list of known hosts. 
+ cd main-clone 
+ echo foo 
+ hg commit -m Modified lib.txt, from inside the main repos 
committing subrepository lib 
+ hg push 
[email protected]'s password: 
pushing to ssh://localhost/hgtest/main 
pushing subrepo lib 
[email protected]'s password: 
searching for changes 
remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 1 changesets with 1 changes to 1 files 
searching for changes 
remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 1 changesets with 1 changes to 1 files 
1

ओह, पिछले जवाब में स्वरूपण के लिए खेद है:

यहाँ कि काम करने का एक लॉग है। यहां फिर से, स्वरूपित है!

ए) एक पूरी तरह से स्थानीय स्थिति में subrepositories का उपयोग करना:

तो, यहाँ दो स्थितियों सबसे लोगों का सामना करना पड़ जाएगा। यह रयान का समाधान है, अनिवार्य रूप से। मुझे लगता है कि अकेले काम करने वाले डेवलपर्स इस नाव में होंगे।

cd /home/moi/hgrepos 
    hg init lib 
    cd lib 
    echo foo > lib.txt 
    hg ci -A -m Init 

    cd /home/moi/hgrepos 
    hg init main 
    cd main 
    echo foo > main.txt 
    echo lib = ../lib > .hgsub 
    hg clone ../lib 
    hg add .hgsub main.txt 
    hg ci -m Init 

    cd /home/moi/hgrepos 
    hg clone main main-clone 
    cd main-clone/lib 
    echo "Modified while on main trunk" >>lib.txt 
    hg commit -m "Modified lib.txt, while on main trunk" 
    hg push 
    cd /home/moi/hgrepos/lib 
    hg update 
    1 files updated, 0 files merged, 0 files removed, 0 files unresolved 

    cat lib.txt 
    foo 
    Modified while on main trunk 

------------------------------------------- ----------------------

बी) एसएसएच पर उपनिवेशों का उपयोग करना।
मुझे लगता है कि टीमों पर काम कर रहे अधिकांश डेवलपर्स इस नाव में होंगे।

1) lib

cd /home/moi/hgrepos 
hg init lib 
cd lib 
echo foo > lib.txt 
hg ci -A -m Init 

2) सेट करें मुख्य सेट करें

cd /home/moi/hgrepos 
hg init main 
cd main 
echo foo > main.txt 
echo lib=ssh://[email protected]/hgrepos/lib > .hgsub 
hg clone ssh://[email protected]/hgrepos/lib lib 
hg add .hgsub main.txt 
hg ci -m Init 

3) क्लोन dir

cd /home/moi/hgtest 
hg clone ssh://[email protected]/hgrepos/lib lib 

4) क्लोन मुख्य dir hgtest को hgtest को lib

cd /home/moi/hgtest 
hg clone ssh://[email protected]/hgrepos/main main 

5), lib.txt संशोधित मुझे खुशी है कि यह काम किया है, जबकि मुख्य ट्रंक

cd /home/moi/hgtest/main/lib 
echo "Modified while on main trunk" >>lib.txt 
hg commit -m "Modified lib.txt, while on main trunk" 
hg push 

6) पर सत्यापित करें कि lib.txt lib भंडार

cd /home/moi/hgtest/lib 
hg pull 
hg update 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
cat lib.txt 
foo 
Modified while on main trunk 
संबंधित मुद्दे