2012-06-12 15 views
7

मैं एक परियोजना पर काम कर रहा हूं और मेरे पास केंद्रीय गिट रेपो है। यह परियोजना कई कांटे के लिए आधार रेखा होने के लिए एक कंकाल है।गिट ट्रैकिंग अपस्ट्रीम

क्या प्रोजेक्ट के लिए केंद्रीय को ट्रैक करने के लिए एक कांटा के लिए अपने स्थानीय कामकाजी भंडार को कॉन्फ़िगर करना संभव है और कंकाल के मास्टर को ट्रैक करने के लिए कंकाल के मास्टर को ट्रैक करने के लिए अपस्ट्रीम नामक एक अलग शाखा के रूप में ट्रैक किया गया है ताकि चेरी में बदलावों को चुन सकें?

मुझे लगता है कि मैं अपने कार्यप्रवाह की तरह कुछ होना चाहते हैं: कंकाल

से >> कांटा 1 खींचतान परिवर्तन

कंकाल बनाएँ >> कांटा कंकाल >> कांटा 2 से कंकाल खींचतान परिवर्तन एक बेहतर प्रक्रिया है मैंने जो वर्णन किया है वह करने के लिए?

उत्तर

7

पढ़ें "Step 3: Configure remotes" GitHub की "कांटा एक रेपो" पृष्ठ (मुझे पता है तुम GitHub का उल्लेख नहीं था, लेकिन यह अभी भी प्रासंगिक है)

  • origin, कांटा के दूरदराज पता है कि अपने स्थानीय क्लोन से/धक्का
  • upstream को खींच सकते हैं अपने मूल रेपो Skeleton के दूरदराज पता है (यदि आप इसे एक git remote add upstream https://..../Skeleton.git साथ जोड़ सकते हैं)

तो नदी के ऊपर एक शाखा नहीं है।

लेकिन अगर आप एक स्थानीय शाखा है जो नदी के ऊपर शाखा के लिए नदी के ऊपर रेपो से रिमोट ट्रैकिंग शाखा गुरु होगा, git branch साथ परिभाषित कर सकते हैं:,

git branch --set-upstream upstream_master upstream/master 

हालांकि, अगर आप एक स्थानीय शाखा की जरूरत नहीं है, विशेष रूप से आप अगर इस पर कभी भी नई प्रतिबद्धता नहीं बनायेगी: upstream/master से आपको जो चाहिए उसे चेरी-पिकिंग के बाद, upstream/master के साथ सीधे अपने मास्टर की तुलना कर सकते हैं।

+0

यह वही है जो मैं करने की कोशिश कर रहा था जिसने इस सवाल को प्रेरित किया। आदेश 'गिट शाखा - सेट-अपस्ट्रीम अपस्ट्रीम_मास्टर अपस्ट्रीम/मास्टर'' गिट रिमोट एड अपस्ट्रीम/एसआरवी/रेपो/गिट/कंकाल.git' के बाद सीधे काम नहीं करेगा। ऐसा क्यों है? मैंने गलती से समस्या निवारण की कोशिश कर रहे मुद्दे को सही किया। मैं अपने मास्टर वर्क पेड़ में 'गिट फ़ेच अपस्ट्रीम' चलाने के लिए बिल्कुल नहीं चाहता था, लेकिन समस्या निवारण के लिए इसका उपयोग करने के बाद मुझे अपस्ट्रीम/मास्टर में रिमोट ट्रैकिंग शाखा जोड़ने की अनुमति मिलती है।मुझे लगता है कि ऐसा इसलिए है क्योंकि रिमोट शाखा अपस्ट्रीम/मास्टर तब तक मेरे रेपो में नहीं है। 'रिमोट एड' के बाद सीधे –

+0

? रिमोट ट्रैकिंग शाखा 'अपस्ट्रीम/मास्टर' को लाने और अपने स्थानीय रेपो में डालने के लिए आपको पहले' गिट फ़ेच अपस्ट्रीम 'की आवश्यकता है। एक 'गिट fetch' आपकी किसी भी स्थानीय फाइलों को संशोधित नहीं करता है। – VonC

1

अपने विवरण के अनुसार, आप कंकाल जब भी यह परिवर्तन पर कांटे rebase चाहिए,

$ git rebase upstream 

का उपयोग कर इस स्थिति को बदलने के रूप में

initially: 
1 - 2 - 3 <- upstream 
     \- 4 <- fork 

upstream changes: 
1 - 2 - 3 - 5 - 6 <- upstream 
     \- 4 <- fork 

after rebase: 
1 - 2 - 3 - 5 - 6 <- upstream 
       \- 4 <- fork 

दूसरे शब्दों में इस प्रकार है, अपने कांटा होगा ऐसा लगता है जैसे इसे कंकाल के सबसे हाल के संस्करण से फोर्क किया गया था।

इस दृष्टिकोण का नुकसान यह है कि यह कांटे के इतिहास को बदलता है ... यदि आप यह नहीं चाहते हैं, तो आप केवल फोर्क में अपस्ट्रीम विलय कर सकते हैं (मुझे लगता है कि चेरी लेने की कोई आवश्यकता नहीं है)।

+0

यदि फोर्क के बाद और रिबेस के पहले अपस्ट्रीम में फ़ाइलों को हटा दिया गया था, तो क्या होगा जब गिट उन फ़ाइलों में परिवर्तन लागू करेगी? –

+0

यदि आपने फ़ाइलों को संशोधित नहीं किया है, तो वे रीबेस के दौरान हटा दिए जाएंगे। यदि आपने उन्हें संशोधित किया है, तो आपके पास एक संघर्ष होगा जिसे आपको मैन्युअल रूप से हल करना होगा। – Sjlver

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