2010-06-14 18 views
7

पर मैन्युअल विलय मैं एक पुन: प्रारंभ कोड के साथ एक मालिकाना स्क्रिप्ट भाषा में विकसित करता हूं जिसमें अधिकांश कॉन्फ़िगरेशन कोड के अंदर ही होते हैं।जीआईटी

स्पष्ट समस्या कोड और उत्पादन वातावरण के बीच कोड में अंतर होगी और यह वही है जो मैं जीआईटी के साथ प्रबंधन करने की कोशिश कर रहा हूं।

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

खैर, जब मैं वापस यह क्या था करने के लिए अपने शाखाओं विलय करने के लिए यह कोड के साथ एक अद्भुत काम करता है .. लेकिन कॉन्फ़िगरेशन के साथ-साथ माइग्रेट किए जाते हैं और की तुलना में मैं फ़ाइल-दर-फ़ाइल खोलने के लिए है, इसे बदलने Git पूछना ।

क्या वैसे भी मैं जीआईटी से स्वचालित विलय को अक्षम कर सकता हूं और कोड विवादों को मैन्युअल रूप से WinMerge या कुछ बाद में विलय करने के रूप में सबकुछ खतरे में डाल सकता हूं? कोड वास्तव में छोटा है। और क्योंकि मैं जा रहा हूँ वैसे भी इसे संपादित करने के विन्यास लागू करने के लिए ...

ps है .: कृपया नोटिस, मैं नहीं Git पर WinMerge कॉन्फ़िगर कैसे पूछ रहा हूँ। मेरे पास ये उपकरण काम कर रहे हैं। मेरा सवाल यह है कि हमेशा शाखाओं के बीच मैन्युअल विलय कैसे करें।

धन्यवाद!

एफ।

उत्तर

5

स्वत: मर्ज

कि एक छोटे से मर्ज ड्राइवर, a .gitattributes file में सेट लिख कर प्राप्त किया जा सकता है अक्षम करें।
unset जैसी नीति हो सकती है जो आप खोज रहे हैं।

Unset 

जांच मर्ज परिणाम के रूप में वर्तमान शाखा से संस्करण ले लो, और घोषणा की कि मर्ज संघर्ष है। यह बाइनरी फ़ाइलों के लिए उपयुक्त है जिनके पास एक अच्छी तरह से परिभाषित विलय अर्थशास्त्र नहीं है।

लेकिन एक और दिलचस्प gitattribute चालक एक clean filer होगा:

http://git-scm.com/figures/18333fig0703-tn.png

कि स्वचालित रूप से सिर्फ रेपो के लिए सामग्री "साफ" करने से पहले अपनी पसंद का एक 'साफ़' स्क्रिप्ट को निष्पादित करेंगे।
इस तरह की 'clean' स्क्रिप्ट आपको उस कोड में एम्बेड किए गए कॉन्फ़िगरेशन मानों को रखने या संशोधित करने के लिए आपके कोड में किए गए परिवर्तनों को स्वचालित करने में मदद कर सकती है।

+0

एचएम .. यह बहुत दिलचस्प है , लेकिन मैं जीआईटी ड्राइवरों से इतना परिचित नहीं हूं। मैं अपने '.gitconfig' निम्नलिखित में शामिल किया है: ' [मर्ज "मैनुअल"] \t नाम = मैनुअल मर्ज \t ड्राइवर = Unset' और फिर .gitattribute को जोड़ा गया: '* मर्ज = मैनुअल ' (इन्हें 'गिट सहायता विलय' से उठाया गया है) हालांकि काम नहीं किया। क्या आप गिट ड्राइवर के साथ अधिक विशिष्ट हो सकते हैं? धन्यवाद! एफ। – filippo

+0

@flpgdt: यह कस्टम मर्ज ड्राइवर होगा (वास्तव में .gitconfig फ़ाइल में परिभाषित)। मैं केवल मर्ज विशेषता का जिक्र कर रहा था (देखें http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html)। एक सरल: 'echo * .xxx विलय = अनसेट> dirWithConfgFiles \ .gitattributes' पर्याप्त होना चाहिए (कॉन्फ़िगरेशन मान सहित कोड फ़ाइलों के लिए' xxx 'एक्सटेंशन होना चाहिए) – VonC

+0

हे दोस्त। यह वास्तव में काम नहीं किया था। मेरे पास .gitattributes (मेरे रूट फ़ोल्डर में और सटीक फ़ाइलों वाले मेरे फ़ोल्डर में दोनों की कोशिश की गई) जैसे * * .xml विलय = अनसेट '। मैं कोशिश कर रहा हूं, लेकिन वैसे भी धन्यवाद। मैं क्लीन ड्राइवर बनाने का तरीका भी देख रहा था, और हालांकि मुझे लगता है कि मैं इसे बनाने में कामयाब रहा हूं, मुझे यकीन नहीं है कि इसका उपयोग करने के लिए जीआईटी को कैसे बताना है :( धन्यवाद! एफ – filippo

2

आप कहते हैं कि "सबसे विन्यास कोड के भीतर ही निहित हैं" लेकिन उम्मीद है कि सभी विन्यास विन्यास के लिए विशिष्ट फ़ाइलों में अलग है। यदि ऐसा है, तो आप एक ही शाखा में कॉन्फ़िगरेशन कोड के परीक्षण और रिलीज दोनों मामलों को जारी रख सकते हैं। फिर आप सामान्य के बजाए परीक्षण कॉन्फ़िगरेशन का उपयोग करने के लिए कमांड लाइन स्विच का उपयोग कर सकते हैं।

अपने कार्यक्रम कमांड लाइन (या वातावरण चर, रजिस्ट्री कुंजी, पाठ फ़ाइल या जो कुछ भी) से एक विन्यास चयन पढ़ सकते हैं, तो आप बिल्कुल विलय करने के लिए नहीं होगा। जब आदेश पंक्ति स्विच मौजूद नहीं है कार्यक्रम परीक्षण विन्यास फाइल पर ध्यान न दें, और छोड़ दें विन्यास की अनदेखी जब कमांड लाइन स्विच मौजूद है सकते हैं।

इस मर्ज के दौरान संभावित गलतियों के साथ-साथ समय यह मर्ज करने के लिए ले जाता है से बचाता है।

+0

एचएनएफ .. मेरी इच्छा है कि यह ऐसा ही था। दुर्भाग्यवश यह थोड़ा खराब है, विन्यास कोड में ही एम्बेडेड हैं। वैसे तकनीकी रूप से "कोड" एक जटिल कॉन्फ़िगरेशन फ़ाइल है जहां इसकी कुछ सामग्री पर्यावरण के साथ सौदा करती है जहां इसे निष्पादित किया जाता है (कनेक्शन, आईडी और पथ का प्रकार)। यह इतना कठिन नहीं हो सकता है ... मेरी इच्छा है कि मैं कुछ 'गिट diff मास्टर देव' की तरह कुछ कर सकता हूं और जब मैं प्रत्येक फ़ाइल के लिए सहेजता हूं, तो परिवर्तन मौजूदा शाखा में संग्रहीत होते हैं ... – filippo

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