2008-10-03 30 views
11

हम यहां अर्ध-केंद्रीकृत गिट भंडार के साथ काम कर रहे हैं जहां मैं काम करता हूं। प्रत्येक डेवलपर केंद्रीय Git भंडार में अपने स्वयं के सबट्री है, इसलिए यह इस तरह दिखता है:क्या मैं स्थानीय शाखाओं को रिमोट शाखाओं में गिट में विभिन्न उपसर्गों के साथ मैप कर सकता हूं?

master 
alice/branch1 
alice/branch2 
bob/branch1 
michael/feature 
release/1.0 
release/1.1

मेरी पेड़ में स्थानीय रूप से कार्य करना मैं topic/feature है, जो केंद्रीय पेड़ में michael/feature से मेल खाती है।

मैं दूरदराज के पेड़ को अपने परिवर्तनों को पुश करने के लिए

git push origin topic/feature:michael/feature 

उपयोग कर रहे हैं। हालांकि, यह बोझिल और गलतियों के लिए प्रवण है (उदाहरण के लिए डेवलपर नाम छोड़ना, फीचर नाम की गलत वर्तनी आदि)।

मैं ऐसा करने के लिए एक क्लीनर तरीका ढूंढ रहा हूं। उदाहरण के लिए, "git push"। मुझे संदेह है कि एक संशोधित fetch refspec के साथ एक अलग रिमोट सेट करना यह करेगा, लेकिन मुझे यकीन नहीं है कि यह वास्तव में कैसे करें। मुझे यह भी सुनिश्चित नहीं है कि विभिन्न रिमोट का उपयोग करने के लिए मेरी वर्तमान शाखा परिभाषाओं को कैसे संशोधित किया जाए।

[remote "origin"] 
    url = git://central/git/project 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "topic/feature"] 
    remote = origin 
    merge = refs/heads/michael/project

संपादित करें:: मैं भी इस लागू करने के लिए खींचती है करने के लिए/चाहूँगा को हासिल करेगा

मेरे वर्तमान .git/config तरह दिखता है। लेकिन क्या branch.<name>.merge इसका ख्याल रखता है?

मैं इसे खोजना जारी रखूंगा और अगर मुझे कुछ मिल जाए तो यहां पोस्ट करें, लेकिन मैं कुछ अन्य अच्छे विचारों की उम्मीद कर रहा हूं।

संपादित करें 2: मैंने फैसला किया है कि मैं स्थानीय और दूरस्थ शाखा नामों को वही रखूंगा। ऐसा लगता है कि यह कम से कम काम होगा और भविष्य की समस्याओं के लिए कम से कम प्रवण होगा।

+0

जब आप .git/config को संशोधित करते हैं, तो पहले इसे वापस न भूलें। यदि आप कुछ खराब कर देते हैं, तो आपको संबंधित स्थिति में वापस आने के लिए फ़ाइल के ज्ञात अच्छे संस्करण को पुनर्स्थापित करने की आवश्यकता है। – webmat

+0

यह वास्तव में बहुत कुछ आता है जब हेरोोकू, नोडेस्टर और ऐपफोग जैसी सेवाओं की मेजबानी करने के लिए गिट परिनियोजन करना। – studgeek

उत्तर

3

यदि आप कर सकते हैं, तो मेरा सुझाव है कि आप स्थानीय शाखा & दूरस्थ रूप से उसी शाखा नाम का उपयोग करें। फिर git push आपकी सभी स्थानीय शाखाओं को केंद्रीय भंडार में संबंधित शाखाओं में धक्का देगी।

स्थानीय और दूरस्थ रिपो में विभिन्न उपसर्गों का उपयोग करने के लिए, आपको प्रत्येक बार जब आप एक नई सुविधा शाखा बनाते हैं तो आपको अपनी कॉन्फ़िगरेशन फ़ाइल में मैपिंग जोड़नी होगी। विषय/BRANCH_NAME के ​​लिए मानचित्रण स्थापित करने के लिए आदेश

git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME 
4

अपने [दूरस्थ "मूल"] अनुभाग में, प्रति पंक्ति एक पंक्ति जोड़ें। मास्टर के लिए मास्टर सहित।

push = refs/heads/master:master 
push = refs/heads/topic/feature:michael/feature 

मुझे यकीन नहीं है कि यह git-config कमांड के साथ कैसे करें।

ध्यान रखें कि अब से, जब आप सीधे गिट पुश (बिना पैरा के साथ) करते हैं तो सभी शाखाओं को उसी पर धक्का दिया जाता है।

क्या आप यह बताने की परवाह करेंगे कि आप स्थानीय शाखाओं और दूरस्थ रूप से समान शाखा नाम क्यों नहीं रखते हैं?

+0

शाखाओं को मेल खाने के बारे में अच्छा बिंदु ... मैं उस पर स्विच कर सकता हूं। इसके बदले, क्या पुश मैपिंग में वाइल्डकार्ड शामिल करना संभव है, प्रश्न में सामान्य के समान? –

1

आप कुछ इस तरह से रिमोट पर अलग-अलग ट्रैकिंग शाखा में अपनी शाखा को मैप कर सकते है:

git remote add heroku [email protected]:YOURAPPNAME.git 
git checkout -b heroku -t heroku/master 

आपका config अप करने के लिए इसी तरह के समाप्त होता है क्या @ पॉल सुझाव देता है (वास्तव में एक टैड "सरल")।

मेरे लिए अच्छी तरह से काम करने वाले उपयोग चरणों के लिए इस गिस्ट (मेरे द्वारा tweaks के साथ) देखें https://gist.github.com/2002048