2011-11-17 10 views
24

के लिए लक्ष्य मैंGit धक्का: शाखा

git push 

और नहीं

git push origin hp1:team/hp1 

दूरस्थ शाखा पहले से मौजूद है के साथ अपने वर्तमान शाखा (HP1) पुश करने के लिए चाहेंगे।

मेरे स्थानीय शाखाओं:

develop 
master 
* hp1 

Git दूरस्थ शो मूल मुझसे कहता है:

Remote branches: 
    develop tracked 
    master tracked 
    team/h2 tracked 
    team/hp1 tracked 
    team/n1 tracked 
Local branches configured for 'git pull': 
    develop merges with remote develop 
    master merges with remote master 
    hp1 merges with remote team/hp1 
Local refs configured for 'git push': 
    master pushes to master (up to date) 

मैं पहले से ही करने की कोशिश की

git branch --set-upstream hp1 origin/team/hp1 

और

git branch --set-upstream hp1 refs/remotes/origin/team/hp1 

लेकिन दोनों काम नहीं करते हैं।

मेरे सहयोगी की एक स्थानीय शाखा है जिसे रिमोट शाखा (टीम/एचपी 1) कहा जाता है और उपरोक्त कोड उसके लिए काम करता है। वह अंत में एक अतिरिक्त

Local refs configured for 'git push': 
    develop pushes to develop (up to date) 
    master pushes to master (up to date) 
    team/hp1 pushes to team/hp1 (up to date) 

तो शायद आप मुझे बता सकें कि क्या गलत है और इसे कैसे ठीक किया जाए।

संपादित मेरी config:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = ***@***:***.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[branch "hp1"] 
    remote = origin 
    merge = refs/heads/team/hp1 

उत्तर

40

पहले सब , जब पहली बार के लिए जोर दे, कार्य करें:

git push -u origin hp1:team/hp1 

-u विकल्प के बारे में:

-u
--set-नदी के ऊपर

हर शाखा उस तारीख को या अधिक है, के लिए सफलतापूर्वक धक्का दिया, अपस्ट्रीम (ट्रैकिंग) संदर्भ जोड़ें, तर्क-कम गिट-पुल (1) और अन्य आदेशों द्वारा उपयोग किया जाता है। अधिक जानकारी के लिए, शाखा देखें .. गिट-कॉन्फ़िगर (1) में।

मैनुअल से नोट करें कि यह स्वयं निर्धारित नहीं करेगा कि अगली बार जब आप git push करते हैं तो क्या होता है। जब आप इस शाखा में git pull करते हैं, तो यह इसे आपके द्वारा सेट अपस्ट्रीम से लाएगा। लेकिन जब आप धक्का देते हैं, तो यह एक मिलान करने वाली शाखा (इस मामले में एचपी 1 और टीम/एचपी 1 नहीं)

काम करने के लिए, आपको push.default कॉन्फ़िगरेशन मान upstream पर सेट करना होगा।एक बार जब आप सेट कि, जब आप एक शाखा से धक्का (बस git push करते हैं), यह के रूप में branch.<name>.merge

ने उल्लेख नदी के ऊपर करने के लिए धक्का होगा तो कार्य करें:

git config push.default upstream 

push.default के बारे में:

push.default

, को परिभाषित करता है कार्रवाई Git धक्का अगर कोई refspec कमांड लाइन पर दिया जाता है, कोई refspec कॉन्फ़िगर किया गया है रखना चाहिए दूरदराज में एक nd कोई refspec कमांड लाइन पर दिए गए विकल्पों में से किसी एक द्वारा निहित है। संभावित मान हैं:

कुछ नहीं - कुछ भी धक्का न दें।

मिलान - सभी मिलान करने वाली शाखाओं को धक्का दें। दोनों सिरों में नाम वाली सभी शाखाओं को मिलान माना जाता है। यह डिफ़ॉल्ट है।

अपस्ट्रीम - वर्तमान शाखा को अपनी अपस्ट्रीम शाखा में दबाएं।

ट्रैकिंग - अपस्ट्रीम के लिए समानार्थी शब्दकोष।

वर्तमान - वर्तमान शाखा को उसी नाम की शाखा में दबाएं।

+0

thx संपादित किया, महान स्पष्टीकरण! साथ ही, मैं अब समझता हूं, यह push.default – m1schka

+0

को सेट किए बिना मेरे सहयोगी के लिए क्यों काम कर रहा है। Push.default के लिए एक और मान सरल - अपस्ट्रीम की तरह है, लेकिन अपस्ट्रीम शाखा का नाम स्थानीय से अलग है तो धक्का देने से इंकार कर देता है। – CodeKid

2

उपयोग -u विकल्प git push रहे हैं:

$ git push -u origin hp1:team/hp1 

फिर, उसके बाद, आप कर सकते हैं:

$ git push 
+0

महान टिप! धन्यवाद!! –

+2

मेरे लिए, यह सिर्फ 'गिट पुल' के लिए कॉन्फ़िगरेशन को बदलता है, 'गिट पुश' कॉन्फ़िगरेशन अभी भी वही है (शाखा एचपी 1 के लिए कोई पुश लक्ष्य सेट नहीं) – m1schka

+0

क्या आप अपनी कॉन्फ़िगरेशन फ़ाइल पोस्ट कर सकते हैं? एक बेहतर प्रारूप के लिए – mipadi

3

(मार्च 2012): सावधान: कि "नदी के ऊपर 'की नीति डिफ़ॉल्ट से एक बन सकता है जल्द ही
(कुछ समय git1.7.10 + के बाद)
:

देखें" Please discuss: what "git push" should do when you do not say what to push? "

वर्तमान सेटिंग में (यानी push.default=matching), git push साथ ut तर्क उन सभी शाखाओं को धक्का देगा जो स्थानीय रूप से और दूरस्थ रूप से उसी नाम से मौजूद हैं।
यह आमतौर पर उपयुक्त होता है जब कोई डेवलपर अपने सार्वजनिक भंडार को धक्का देता है, लेकिन साझा भंडार का उपयोग करते समय खतरनाक नहीं हो सकता है।

प्रस्ताव अर्थात केवल वर्तमान शाखा धक्का, और शाखा Git पुल से खींच जाएगा करने के लिए धक्का 'upstream' करने के लिए डिफ़ॉल्ट परिवर्तन करने के लिए है।
एक और उम्मीदवार 'current' है; यह केवल उसी शाखा की रिमोट शाखा में वर्तमान शाखा को धक्का देता है।

क्या अब तक इस सूत्र में देखा जा सकता चर्चा की गई:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

पिछला प्रासंगिक विचार विमर्श में शामिल हैं:

चर्चा में शामिल होने के लिए, करने के लिए अपने संदेश भेजने: [email protected]

+0

गिट 2.0 गिट पुश के लिए डिफ़ॉल्ट व्यवहार को बदल देगा, लेकिन केवल "सरल" मोड में जो मुझे नहीं लगता कि वह वही करेगा जो आप चाहते हैं। Https://www.kernel.org/pub/software/scm/git/docs/git-config.html –

+0

@AlexanderBird हां, आप सही हैं। मैंने तब से दस्तावेज किया है: http://stackoverflow.com/a/10002469/6309, http://stackoverflow.com/a/13751847/6309। – VonC

0

निम्नलिखित एक पहले git push के लिए -u ${branch_name} निर्दिष्ट करने के लिए नहीं की अनुमति देगा।

git config "branch.${branch_name}.remote" origin 
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}" 

दी है, यह भी बहुत कुछ टाइपिंग है, लेकिन नहीं, जब यह एक स्क्रिप्ट है कि किसी की कार्यक्षेत्र सेट में है। यह शाखा को रिमोट रेपो में समय-समय पर धक्का नहीं देता है।

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