2010-03-08 16 views
15

के साथ एक रिमोट पर धक्का दें, मैं हेरोकू पर एक स्टेजिंग शाखा बनाने की कोशिश कर रहा हूं, लेकिन ऐसा कुछ है जो मुझे काफी नहीं मिलता है।गिट पुश वर्तमान शाखा को हर्मोकू

मान लिया जाये कि मैं पहले से ही, मचान-रिमोट को इंगित करने के लिए दूरदराज के एक Heroku एप्लिकेशन और सेटअप बनाया है, तो मुझे क्या करना:

git checkout -b staging staging-remote/master 

मैं एक स्थानीय शाखा 'मचान' कहा जाता है जो मंचन-दूरस्थ पटरियों मिल/मास्टर - या कि मैं क्या सोचा है ....

लेकिन:

git remote show staging-remote 

मुझे देता है यह:

remote staging 
    Fetch URL: [email protected]:myappname.git 
    Push URL: [email protected]:myappname.git 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local branch configured for 'git pull': 
    staging-remote merges with remote master 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 

जैसा कि आप देख सकते हैं, पुल उचित दिखता है, लेकिन डिफ़ॉल्ट पुश नहीं करता है। इसका अर्थ है कि अगर मैं कार्य करें:

Git धक्का मचान-दूरस्थ

मैं मचान शाखा करने के लिए अपने स्थानीय गुरु शाखा पुश करने के लिए जा रहा हूँ।

git push staging-remote mybranch:master 
ऊपर

है मुश्किल नहीं: लेकिन है कि मैं क्या चाहते हैं .... असल में, मैं बहुत की तरह शाखा निर्दिष्ट किए बिना ही मेरी मचान शाखा में अपडेट विलय, तो आसानी से Heroku को धक्का करना चाहते हैं नहीं है करने के लिए, लेकिन मैं गलती से पिछले धक्का कर रहा हूं और गलत शाखा को दबा रहा हूं ... उत्पादन शाखा के लिए यह दोगुना महत्वपूर्ण है जिसे मैं बनाना चाहता हूं!

मैं Git config के साथ खिलवाड़ की कोशिश की है, लेकिन पता लगा नहीं किया है कि यह कैसे सही अभी तक

उत्तर

25

मैंने इसका परीक्षण किया है और @ जुबा और @ मैथ्यूफोर्ड के संस्करण पूरी तरह से काम करते हैं!

git config remote.staging.push staging:master 

यह मेरा स्थानीय विषय शाखा नामित मंचन नामित दूरदराज के भंडार पर मास्टर दूरस्थ शाखा में मंचन धक्का।

@nickgrim इसलिए की तरह सामान्य रूप में रख:

git config remote.[remoteRepositoryName].push [localBranchName]:[remoteBranchName] 

अद्यतन:

इसके अलावा, आधुनिक Git आसानी से आप के लिए ऊपर विन्यास आदेश चला जाएगा जब आप -u विकल्प के साथ git push :

git push -u staging staging:master 
+1

master' पीछे की ओर; आप चाहते हैं: 'Git config दूरस्थ [remoteName] .push [localBranchName]:। [remoteBranchName]' –

+2

@DavidAlpert: नहीं, आपको लगता है कि मिल गया है, दूसरे शब्दों में – nickgrim

+0

@nigkgrim पूरी तरह से सही है। – thekingoftruth

0

मैं यह करने के लिए एक रास्ता समझ नहीं सकता है ... करने के लिए, लेकिन अंत में मैंने पाया एक आसान रेक कार्य आसान इसे बनाने के लिए: http://www.jbarnette.com/2009/11/10/deploying-to-heroku.html

1

पृष्ठ से Everiday Git 20 आदेशों या तो साथ:

http://www.kernel.org/pub/software/scm/git/docs/everyday.html

यह टी लगता है टोपी आप प्राप्त कर सकते हैं अपने स्थानीय Git संग्रह का config निर्देश जोड़कर आप क्या करना चाहते हैं, तो कुछ की तरह:

git config remote.staging-remote.push mybranch:refs/remotes/staging-remote/master 

तब, यदि आप एक git push अपने mybranch से स्थानीय शाखा करते हैं, यह करने के लिए धक्का दिया जाना चाहिए मास्टर आपकी स्टेजिंग-रिमोट रिमोट की शाखा।

फिर भी, git remote show staging-remote साथ सत्यापित करें और ध्यान से उपयोग करने से पहले परीक्षण करते हैं, के रूप में मैं एक Git विशेषज्ञ से दूर हूँ ...

7

मैं एक शाखा Heroku कहा जाता है, और यह मेरे लिए काम किया:

git config remote.heroku.push heroku:master 

जिस समस्या का आप सामना कर रहे हैं वह है Heroku मास्टर के अलावा सभी शाखाओं को अनदेखा करता है।

0

मुझे यह भी पता लगाने की कोशिश कर रहा है कि सभी शाखाओं को अनदेखा करने के लिए हेरोकू की नीति से कैसे निपटें, लेकिन 'मास्टर'।यदि आप कभी भी हरोकू पर मास्टर शाखा का परीक्षण कर सकते हैं तो यह अलग शाखाओं को रखने के पूरे बिंदु को हरा देता है।

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

क्या मैं http://progit.org/book/ch9-5.html की "धक्का Refspecs" खंड पढ़ने से मिला

Git धक्का Heroku स्थानीय विषय-शाखा है: refs/सिर/मास्टर

क्या मैं सच में करना चाहते हैं के लिए एक रास्ता है इसे कॉन्फ़िगरेशन फ़ाइल में सेट करें ताकि "गिट पुश हेरोकू" हमेशा ऊपर की ओर हो, "स्थानीय-विषय-शाखा" को बदलकर जो भी मेरी वर्तमान शाखा हो, उसके नाम से।

मैं इसे एक नए प्रश्न के रूप में पूछ सकता हूं, यह देखने के लिए कि किसी और ने यह पता लगाया है कि यह कैसे किया जाए।

+1

'Git config remote.heroku.push HEAD: > Git config दूरस्थ [localBranchName] .push [remoteName]::। [RemoteBranchName] –

3

"O'Reilly - संस्करण नियंत्रण के साथ संस्करण" पृष्ठ से पृष्ठ 184 | अध्याय 11: रिमोट डेटा संग्रह स्थान

एक Git धक्का ऑपरेशन के दौरान, आप आमतौर पर प्रदान करते हैं और परिवर्तन आप अपने स्थानीय विषय शाखाओं पर किए गए प्रकाशित करना चाहते हैं। दूसरों को अपलोड करने के बाद रिमोट रिपोजिटरी में आपके परिवर्तनों को ढूंढने के लिए, आपके परिवर्तन उस शाखा में विषय शाखाओं के रूप में दिखाई दे सकते हैं।

+refs/heads/*:refs/heads/* 

यह refspec के रूप में दूसरे शब्दों में बयान किया जा सकता है: स्थानीय भंडार से , प्रत्येक लेने के इस प्रकार, एक ठेठ Git धक्का आदेश दौरान, अपने भंडार से स्रोत शाखाओं दूरदराज के भंडार के लिए इस तरह के रूप में एक refspec का उपयोग कर भेजा जाता है स्रोत नामस्थान refs/heads/ के तहत पाया गया शाखा नाम और दूरस्थ भंडार में गंतव्य नामस्थान refs/heads/ के तहत समान नामित, मिलान करने वाली शाखा में रखें। पहला refs/heads/ आपके स्थानीय भंडार को संदर्भित करता है (क्योंकि आप पुश निष्पादित कर रहे हैं), और दूसरा रिमोट रिपोजिटरी को संदर्भित करता है। तारांकन सुनिश्चित करते हैं कि सभी शाखाएं दोहराई गई हैं। ...


है यही कारण है कि जुबा से उदाहरण असफल चाहिए। सही रेफस्पेक होना चाहिए:

git config remote.staging-remote.push +refs/heads/local_branch_name:refs/heads/master 
0

यह काम करता है। मैंने गिट-फ्लो, हेरोकू और बैकअप गिट सेवा के साथ ग्राहकों को स्थापित करने के लिए इसे कुछ बार इस्तेमाल किया है। रेपो के लिए

.git/config:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[heroku] 
    account = youraccount 
[remote "origin"] 
    url = [email protected]:youruser/yoursite.heroku.com.git # or github, etc. 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[branch "staging"] 
    remote = origin 
    merge = refs/heads/staging 
[branch "develop"] 
    remote = origin 
    merge = refs/heads/develop 
[remote "production"] 
    pushurl = [email protected]:your-prod-app.git 
    push = master:master 
[remote "staging"] 
    pushurl = [email protected]:your-staging-app.git 
    push = staging:master 

सभी सही ढंग से काम:

git push origin

git pull origin

git push staging

git push production

के बारे में लाने और stdout और stdin, जहां दोनों पुनः निर्देशित या एक ही रास्ता होने के लिए बंद किया जा सकता की तरह के रूप में धक्का लगता है। किसी को भी जानता है इसके अलावा, अगर .git/config हैकिंग के बिना इन सेटिंग्स पाने के लिए, एक संपादन के साथ में संशोधन करने में संकोच न करें, कर्म अंक का पालन करना सुनिश्चित कर रहे हैं।

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