2009-11-23 3 views
16

मेरे पास एकाधिक Mercurial भंडार हैं और हमारे फ़ाइल सर्वर पर बैकअप बनाने के लिए hg clone का उपयोग किया। अब मैं एक बैच फ़ाइल लिखना चाहता हूं जो प्रत्येक उपनिर्देशिका पर hg pull -u चलाकर दिन में एक बार उन्हें अपडेट करे।क्या एचजी खींच केवल वर्तमान कार्य निर्देशिका पर काम करता है?

मैं इस बैकअप स्क्रिप्ट को जितना संभव हो उतना सामान्य रखना चाहता हूं, इसलिए इसे मेरे एच: \ BACKUPS \ REPOS फ़ोल्डर में संग्रहीत सभी बैकअप रिपॉजिटरीज़ को अपडेट करना चाहिए।

for /f "delims=" %%i in ('dir /ad/b') do hg pull -u

समस्या: एचजी खींच केवल वर्तमान कार्यशील निर्देशिका पर काम करने लगता है, वहाँ के लिए लक्ष्य भंडार निर्दिष्ट करने के लिए कोई स्विच हो रहा है यह मेरा hgbackup.bat है कि एक ही फ़ोल्डर में संग्रहीत किया जाता है खीचे। जैसा कि मुझे विंडोज बैच स्क्रिप्टिंग से नफरत है, मैं अपने .bat को यथासंभव सरल रखना चाहता हूं और विभिन्न निर्देशिकाओं को सीडीइंग से बचाना चाहता हूं।

कोई विचार मैं एक अलग निर्देशिका पर hg pull -u कैसे चला सकता हूं?

+0

यदि आप इसे बैकअप के रूप में संग्रहीत कर रहे हैं, तो पुल पर '-उ'pdate क्यों? यह मदद के लिए धन्यवाद –

उत्तर

32

उपयोग -R स्विच:

hg pull -u -R /path/to/repository 

hg pull के सभी कमांड लाइन विकल्प के लिए hg -v help pull देखें (-v स्विच वैश्विक विकल्पों में शामिल हैं करने में मदद बताता है)।

+1

संग्रहित डेटा की मात्रा को तुरंत अनावश्यक रूप से बढ़ाता है! हां, मैं -R विकल्प भर में फंस गया, लेकिन मैंने सोचा कि यह खींचने के लिए भंडार निर्दिष्ट करेगा। – fbuchinger

+3

धन्यवाद! अन्य googlers के लिए स्पष्टीकरण के रूप में, -R विकल्प वर्तमान निर्देशिका के अलावा किसी अन्य निर्देशिका पर किसी भी hg कमांड को चलाने का वैश्विक विकल्प है। मैंने इसे एक रेपो में एक संबंधित रेपो में एक प्रतिबद्धता से परिवर्तन खींचने के लिए उपयोग किया: 'hg log -pr 9369 -R ../other-repo | पैच -पी 1'। यदि आपके पास पैच नहीं है, तो 'hg import --no-commit' समान है। – undefined

0

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

$path = "c:\users\mattgwagner\Documents\Code" 

foreach($fi in get-childitem $path) 
{ 
    if(test-path $path\$fi\.svn) 
    { 
     "Updating " + $fi + " via Subversion..." 
     svn update $path\$fi 
    } 
    elseif(test-path $path\$fi\.hg) 
    { 
     "Updating " + $fi + " via Mercurial..." 
     hg pull -u -R $path\$fi 
    } 
} 
संबंधित मुद्दे