2013-01-14 22 views
7

पर पुश करें, मैं केवल git push का उपयोग केवल मौजूदा शाखा को कॉन्फ़िगर किए गए अपस्ट्रीम पर धक्का देने के लिए करना चाहता हूं। इसके लिए मैंने git config push.default upstream सेट किया जो वास्तव में सही काम करता है।वर्तमान शाखा को गेरिट

अब मैंने गेरिट के लिए उपयुक्त रिमोट सेट अप करने का प्रयास किया, जो स्वचालित रूप से refs/for/* पर चला जाता है।

विचार यह इस तरह से कर रहा था:

[remote "gerrit"] 
     url = ssh://host:port/repo 
     push = refs/heads/*:refs/for/* 

मैं git push gerrit टाइप करें और Git सही रेफरी को केवल वर्तमान शाखा पुश करने के लिए उम्मीद करना चाहते हैं।

दुर्भाग्य से अब गिट सभी स्थानीय शाखाओं को गेरिट को धक्का देने की कोशिश करता है। - क्या गिट को केवल push.default के साथ मौजूदा शाखा को धक्का देने का कोई तरीका है?

अद्यतन:

  • Git धक्का केवल एक ही refspec उपयोग कर सकते हैं।
  • यदि कमांड लाइन पर एक स्पष्ट रेफस्पेक दिया जाता है तो इसका उपयोग किया जाता है।
  • यदि कमांड लाइन पर कोई भी नहीं दिया गया है, तो दूरस्थ के साथ परिभाषित एक का उपयोग किया जाता है।
  • यदि रिमोट के साथ कोई भी नहीं दिया जाता है, तो केवल push.default पर विचार किया जाता है।

गेरिट के लिए मुझे शाखा के साथ 'शाखा: रेफरी/फॉर/शाखा' जैसी रीफस्पेक की आवश्यकता है, जिसमें शाखा वर्तमान शाखा है।

प्रश्न:

  • वहाँ के लिए क्या push.default = नदी के ऊपर क्या कर रहा है एक स्पष्ट refspec बराबर है?
  • क्या सादा git push बनाने के लिए गिट को कॉन्फ़िगर करने का कोई तरीका है स्वचालित रूप से सही रेफरी/रेफरी के लिए पुश करें?

वर्तमान में मुझे मिला सबसे अच्छा तरीका एक अलग लिपि में सब कुछ लपेट रहा है जैसे here। लेकिन मुझे अभी भी विश्वास नहीं है कि केवल एक उपयुक्त रेफस्पेक के साथ यह संभव नहीं है।

+0

ठीक है। बस यहां विभिन्न विकल्पों की जांच करें। मैंने सीखा है कि 'push.default' केवल तभी माना जाता है जब कोई रेफस्पेक नहीं दिया जाता है। और यदि आप कमांड लाइन के माध्यम से एक रेफस्पेक (जैसे 'HEAD') की आपूर्ति करते हैं, तो यह रिमोट के साथ दिए गए रेफस्पेक को ओवरराइड करता है। इसलिए यह केवल 'रेफ/हेड' को दबाएगा, जो आप नहीं चाहते हैं। दिलचस्प। – VonC

उत्तर

1

source के अनुसार, गिट वर्तमान में स्पष्ट नाम वाले एक स्पष्ट रेफस्पेक उत्पन्न करके push.default = upstream लागू करता है।

ऐसा लगता है कि वर्तमान में एक सामान्य जेनरिक रीफस्पेक द्वारा उस व्यवहार को निर्दिष्ट करने का कोई तरीका नहीं है, और कुछ स्क्रिप्ट (जैसे here सुझाया गया है) जो एक स्पष्ट रेफस्पेक बनाता है अब के लिए एकमात्र तरीका है।

+0

दिलचस्प प्रतिक्रिया, मेरे (अब हटाए गए) उत्तर से निश्चित रूप से अधिक सटीक। +1 – VonC

-1

आप git config --global push.default current कमांड के साथ रिमोट रिपोजिटरी में केवल वर्तमान शाखा भेजने के लिए गिट को कॉन्फ़िगर कर सकते हैं।

अन्य विकल्प है कि आप push.default को पारित कर सकते हैं कर रहे हैं:

nothing - do not push anything. 
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default. 
upstream - push the current branch to its upstream branch. 
tracking - deprecated synonym for upstream. 
current - push the current branch to a branch of the same name. 

ये विन्यास git help config आदेश में देखा जा सकता है।

अद्यतन: हालाँकि, और अधिक ध्यान से मैन्युअल पृष्ठ पढ़ने, push.default "को परिभाषित करता कार्रवाई Git धक्का लेना चाहिए अगर कोई refspec कमांड लाइन पर दिया जाता है, कोई refspec दूरदराज में कॉन्फ़िगर किया गया है, और कोई refspec से किसी के द्वारा निहित है कमांड लाइन पर दिए गए विकल्प "। इसलिए, मुझे लगता है कि एक रेफस्पेक निर्दिष्ट करते समय आपको केवल वर्तमान शाखा भेजने के लिए स्क्रिप्ट का उपयोग करने की आवश्यकता होगी।

+0

क्या आपने पोस्ट करने से पहले ऊपर मेरी टिप्पणी पढ़ी? मैंने नीचे दिए गए उत्तर दिए (हटाए गए, आप इसे नहीं देख सकते), और एक -1 मिला;) – VonC

+0

क्या आपने पूरी तरह से प्रश्न पढ़ा? नहीं, push.default केवल तभी माना जाता है जब कोई रेफस्पेक नहीं दिया जाता है, यानी यह केवल सिर पर धक्का देता है। – michas