2010-12-23 11 views
20

मेरे पास दो शाखाओं के साथ एक भंडार है: लाइव और मंच। भंडार में वेब आधारित एप्लिकेशन के लिए कोड होता है। मैं मंच और लाइव शाखाओं के लिए दो अलग-अलग। Htaccess फ़ाइलों को बनाए रखना चाहता हूं, लेकिन फिर भी उन्हें संस्करण नियंत्रित रखता है, क्योंकि एक मंच साइट की सेवा करने की प्रकृति थोड़ा अलग है (अभी उदाहरण के लिए, मैं कैश का समय चाहता हूं अलग ढंग से)।गिट वर्कफ़्लो: क्या मैं किसी निश्चित फ़ाइल को किसी अन्य शाखा में विलय करने से रोक सकता हूं लेकिन फिर भी इसे संस्करण नियंत्रण में रख सकता हूं?

मैं तो वहाँ शायद एक आसान व्याख्या है Git के साथ एक नौसिखिया हूँ, लेकिन मैं एक कार्यप्रवाह जहां जब मैं लाइव में था करना चाहते हैं और मैं परिवर्तन (सरल git merge stage) खींच लिया, मैं मौजूदा अधिलेखित नहीं किया लाइव शाखा में। htaccess। क्या इसे कॉन्फ़िगर करने का कोई तरीका है? क्या मुझे गिट में कुछ बड़ी अवधारणा याद आ रही है?

इसी प्रकार, एक (लेकिन संभवत: कई) .html फ़ाइलों का एक हिस्सा भी है जहां मैं परिवर्तनों का ट्रैक रखना चाहता हूं लेकिन उन्हें वापस लाइव में विलय नहीं करना चाहता हूं। बस स्पष्ट होने के लिए, मैं इन फ़ाइलों में परिवर्तनों का ट्रैक रखने के लिए लाइव और मंच चाहता हूं, लेकिन विलय करते समय उन कुछ परिवर्तनों को मर्ज न करें।

उत्तर

29

मैं स्टैक ओवरफ़्लो पर एक answer on another question पाया, क्रेडिट fcurella को जाता है:

मान लीजिए कि आप ई करना चाहते हैं फ़ाइल config.php

xclude शाखा एक पर:

  1. एक ही निर्देशिका में .gitattributes नाम की एक फ़ाइल बनाएं, इस लाइन के साथ: config.php merge=ours। यह गिट बताता है कि फ़ाइल विलय करते समय किस रणनीति का उपयोग करना है। इस मामले में यह हमेशा आपका संस्करण रखता है, यानी। जिस शाखा में आप विलय कर रहे हैं उस संस्करण का संस्करण।

  2. .gitattributes फ़ाइल जोड़ें और प्रतिबद्ध

शाखा बी पर: दोहराने कदम 1-2

अब विलय की कोशिश करो। आपकी फाइल छूटे रहना चाहिए।

यह एक अधिक स्केलेबल समाधान की तरह लगता है।

+14

यह केवल तभी काम करता है जब config.php में विवाद होता है जबकि अन्यथा विलय होता है, यह फ़ाइल काम नहीं करता है और फ़ाइल को ओवरराइट करता है। – dirtyhandsphp

+0

हां लेकिन यह सबसे महत्वपूर्ण है: मेरे मामले में, मैं अपने सीएसएस फ़ाइलों को संशोधित किए बिना मूल भंडार से एक कांटा सिंक करना चाहता हूं। –

5

अंकुर, इस प्रयास करें: मान लिया जाये कि आप लाइव शाखा पर बाहर जाँच कर रहे हैं

, चलाएँ:

git merge --no-commit --no-ff stage 

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

git checkout live .htaccess 

अब अपने काम के पेड़ .htaccess के अपवाद के साथ मंच से सभी परिवर्तनों है, और इसलिए आप कर सकते हैं मर्ज को अंतिम रूप देने के लिए प्रतिबद्ध:

git commit -m "Pulled changes from stage" -a 
+0

यह सामान्य विचार है, लेकिन अगर मेरे पास 5-10 और फाइलें हैं जो अंत में भिन्नताएं हैं तो यह अच्छी तरह से स्केल नहीं करता है। मुझे अपने आप को ट्रैक करना होगा। – Ankur

+0

यदि आपके पास इन विलयों में कई और फाइलें हैं जिन्हें आप संरक्षित करना चाहते हैं, तो शायद आप इन्हें अपनी खाली शाखाओं में डाल सकते हैं (एक लाइव साइट के लिए, एक मंच साइट के लिए)। इस तरह, आप लाइव और स्टेज शाखाओं के बीच विलय करने के दौरान सामान्य के रूप में आगे बढ़ सकते हैं, लेकिन अभी भी .htaccess और आपकी शेष स्थिर HTML फ़ाइलों में परिवर्तनों को ट्रैक करने के लिए अलग-अलग शाखाएं हैं। –

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

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