2010-07-21 11 views
5

मैं जानना चाहता हूं कि डिफ़ॉल्ट पुश को बंद करने का कोई तरीका है या नहीं, लेकिन Mercurial का उपयोग करते समय डिफ़ॉल्ट खींचें। मैं अनजाने में एक प्रयोगात्मक भंडार से धक्का देकर मास्टर रिपोजिटरी को गलती से प्रदूषित नहीं करना चाहता हूं।क्या आप डिफ़ॉल्ट-पुश को रोक सकते हैं, लेकिन पुल को अनुमति दें?

उत्तर

3

आपका समाधान शायद सबसे तेज़ और निश्चित रूप से प्रभावी है।

[hooks] 
preoutgoing = bash -c 'read -p "Really push to $HG_URL? " -n 1 RESP ; [ "$RESP" == "y" ]' 

जो आपसे पूछेगा कि आप धक्का और वह URL, जिससे यह एक चेतावनी के रूप में जाना प्रदान करना चाहते हैं: अगर कोई आधिकारिक जिस तरह से यह एक preoutgoing हुक का उपयोग किया जाएगा।

+0

अरे, मुझे यह वास्तव में पसंद है, यह मार्टिन के समान है, लेकिन जब मैं मैन्युअल रूप से कमांड लाइन पर यूआरएल टाइप करता हूं तो मुझे जारी रखने का विकल्प देता है। यदि आप मुझे बता सकते हैं कि शक्तियों में इसे कैसे करना है, तो हम व्यवसाय में हैं। – moswald

+0

मुझे लगता है कि शक्तियों में जटिल स्क्रिप्टिंग करने का आदेश wubi.exe है। जिसका मतलब है, माफ करना, मैं शक्तिशक्ति नहीं जानता। ;) –

+0

मैंने काफी प्रयोग किया था, लेकिन इसे काम करने में काफी कुछ नहीं मिला। अगर मैं इसे हल करता हूं तो मैं यहां प्लगिंग को दूर रखूंगा और अपडेट करूँगा। – moswald

7

मैं इसे .hg/hgrc फ़ाइल में निम्नलिखित डालकर हल करने में सक्षम था, लेकिन मैं सोच रहा था कि कोई बेहतर/आधिकारिक तरीका है या नहीं।

[paths] 
default = http://server/hg/repo 
default-push = . 
+0

नीचे वोट करने के लिए होती है, कभी गलती से क्लिक किया। :( – sojin

+0

यह उत्तर लगभग काम करता है, या, बल्कि, ज्यादातर काम करता है, लेकिन अगर "।" में एक रेपो शामिल है तो विभाजित कर सकते हैं - उदाहरण के लिए यदि आप अपनी होम निर्देशिका करते हैं। मैंने ऐसी समस्या से बचने के लिए इसे थोड़ा नीचे फिसल दिया। –

+0

@KrazyGlew मुझे नहीं लगता कि यह जरूरी है। उन्होंने कहा कि वह इसे '.hg/hrc' में कर रहा है, इसलिए यह रेपो में है और इस प्रकार रेपो रूट के सापेक्ष है, ताकि वह हमेशा' खुद को धक्का दे 'जो कभी भी कुछ नहीं करना चाहिए। –

2

मैं paths.default-push = . स्थापित करने की अपनी खुद की उत्तर चाहते हैं - यह आसान है और यह स्पष्ट है कि यह काम करेगा।

एक अन्य विकल्प एक पूर्व धक्का हुक होगा: (। यहाँ मैं आप उन्हें कैसे एक मर्क्युरियल कॉन्फ़िग फ़ाइल में इंडेंट करके कई लाइनों पर एक लंबे मूल्य विभाजित कर सकते हैं का लाभ ले रहा हूँ)

[hooks] 
pre-push = if [ $HG_PATS == "[]" -o $HG_PATS == "['default']" ]; then 
       read -p "Really push to default? " -n 1; echo 
       [ "$REPLY" == "y" ] 
      fi 

डिफ़ॉल्ट करने के लिए एक धक्का लग रहा है इस

% hg push 
Really push to default? n 
warning: pre-push hook exited with status 1 

जहाँ मैं n टाइप किया है। हुक दोनों तर्कों ($HG_PATS == "[]") और तर्क के रूप में डिफ़ॉल्ट ($HG_PATS == "['default']") के लिए जांच करता है और केवल उन मामलों में आपको सूचित करेगा। Mercurial 1.6 में $HG_PATS चर प्रस्तुत किया गया था।

पीएस: मैंने देखा कि आपने सवाल अपडेट किया है और पावरशेल में एक समाधान के लिए कहा है, लेकिन मुझे डर है कि मुझे उस भाषा के बारे में कुछ नहीं पता है। हालांकि, आप अपने उत्तर से महत्वपूर्ण अवधारणाओं को उठाने में सक्षम होना चाहिए।

+0

यह बहुत अच्छा है, लेकिन क्या यह पुश क्षमता को पूरी तरह से हटा नहीं देता है?मैं धक्का देने में सक्षम होना चाहता हूँ; मैं बस यह सुनिश्चित करना चाहता हूं कि मैं गलती से डिफ़ॉल्ट पर धक्का नहीं दूंगा। – moswald

+0

मस: आप सही हैं ... मैंने आपको फिर से धक्का देने के लिए उत्तर अपडेट किया है और मैंने Ry4an के उत्तर के सर्वोत्तम भी शामिल किए हैं। –

+0

अद्यतन के लिए धन्यवाद। मुझे लगता है कि मेरे लिए एक नया सवाल पूछने का समय है: एचजी हुक में काम करने के लिए पावरहेल कमांड कैसे प्राप्त करें। – moswald

0

जवाब पहले से hgrc में तैनात, की स्थापना

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

मैं, ~/.hgrc में paths.default-धक्का की स्थापना यह थोड़ा और अधिक आत्म दस्तावेजीकरण और कम त्रुटि बनाने के विचार अलंकृत किया है:

यहाँ निष्क्रिय करने के लिए डिफ़ॉल्ट-धक्का मेरे वर्तमान BKM है -प्रोन - चूंकि, मैं नीचे बताता हूं, डिफ़ॉल्ट-पुश = सेटिंग सेट करता हूं। हमेशा धक्का अक्षम नहीं करता है।

में

~/.hgrc

[paths] 
# my main project master repo 
project-master = ... 

#DISABLING IMPLICIT PUSH 
#  to prevent embarassment from accidentally pushing to the project master repo 
#  instead of, in my case, a repo that has fine grain commits 
#  that the rest of the team does not want to see in the project master repo 
#default-push = . 
#  this works mostly, but NOT if you use hg on your home directory 
#  since '.' in ~/.hgrc seems to be interpreted as -R ~ 
#default-push = /NONEXISTENT_default-push_--_must_specify_push_target_explicity 
#  this works ok, but I can clean up the error message using blanks 
#  keeping this around because blanks in pathnames confuses many UNIX tools 
default-push = /'NONEXISTENT default-push -- must specify push target explicitly' 
#  this amounts to disabling implicit push targets. 
+0

आप शायद ~ .hgc' (प्रति उपयोगकर्ता एचजीआरसी) की बजाय अपने प्रयोगात्मक रिपोज़ के लिए '.hg/hgrc' (प्रति-रेपो एचजीआरसी) में ऐसा करने से बेहतर हैं। यह निश्चित रूप से एमजी ऊपर सुझाव दे रहा था। जब यह मामला '.' पूरी तरह से सुरक्षित है। –

+0

~/.hrc बिल्कुल वही है जो मैं चाहता हूं। मैं बहुत सारे क्लोन करता हूं, और यह इन क्लोनों में ताजा बनाया गया डिफ़ॉल्ट है, कि मैं गलती से गलत जगह पर वापस जाने से रोकना चाहता हूं। /.hg/hgrc में ऐसा करने में समस्या यह है कि /.hg/hgrc क्लोन द्वारा प्रचारित नहीं है। यदि आप /.hg/hgrc का उपयोग करना चाहते हैं, तो आपको प्रत्येक क्लोन के बाद इसे इंस्टॉल करना होगा। अब, मैंने * ऐसा करने के लिए मेकफ़ाइल लिखे हैं - एचजी क्लोन प्रोजेक्ट foo; make -C foo install-hgrc - लेकिन (ए) मुझे नहीं लगता कि क्लोन के बाद एक डिफ़ॉल्ट कार्रवाई है, इसलिए आपको रैपर करना होगा। और (बी) के अन्य उपयोगकर्ता इसे नहीं चाहते हैं। –

+0

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

संबंधित मुद्दे

 संबंधित मुद्दे