2015-09-16 7 views
8

की एक अलग शाखा में एक उपनिर्देशिका को कैसे दबाएं वर्तमान प्रोजेक्ट जिस पर मैं काम कर रहा हूं वह एक गिट भंडार तक सीमित है। मेरे वर्तमान कार्यशील निर्देशिका इस तरह दिखता है:गिट: एक ही रिपॉजिटरी

dist/ 
    *distribution files 

src/ 
    *src files 

हम एक Azure सर्वर स्वचालित रूप से कुछ भी तैनात करने के लिए की स्थापना की हमारे रेपो की 'तैनात' शाखा की ओर धकेल दिया है। तो उद्देश्य मास्टर फ़ाइलों को मास्टर और डिस्ट फ़ोल्डर की सामग्री को 'तैनाती' शाखा में धक्का देना है।

जो मैं अभी तक कर रहा हूं वह अब तक मास्टर को बंद कर रहा है, src फ़ोल्डर को हटा रहा है, और तैनात करने के लिए धक्का देने से पहले dist फ़ोल्डर की सामग्री को रूट पर ले जा रहा है।

मुझे पता है कि हमारे पास अलग-अलग प्रतिनिधि होंगे, लेकिन वर्तमान में यह कोई विकल्प नहीं है। क्या इसे करने का कोई आसान रास्ता है?

उत्तर

8

git-subtree कमांड इसके लिए बहुत अच्छा काम करता है। अपने master शाखा से कार्य करें:

git subtree split --branch deploy --prefix dist/ 

बस चलाने कि हर बार जब आप deploy शाखा को अपडेट करना चाहते आदेश। यह dist सबडिर (वर्तमान शाखा - अनुमानतः master) में deploy शाखा की जड़ में प्रत्येक प्रतिबद्धता को विलय करेगा और पूर्ण प्रतिबद्धता इतिहास बनाए रखेगा। ध्यान दें कि केवल dist उपदिर में परिवर्तन विलय हो जाएगा। यदि किसी प्रतिबद्धता में dist सबडियर और रेपो में अन्य फ़ाइलों दोनों में परिवर्तन शामिल हैं, तो केवल dist उपदिर में परिवर्तन शामिल हैं।

मुश्किल हिस्सा स्थापना है। जैसा कि मैं इसे समझता हूं, कमांड 1.7.11 और उच्चतम के साथ शामिल है। हालांकि, यह "contrib" subtree में है, इसलिए यह डिफ़ॉल्ट रूप से स्थापित नहीं है। अपने सिस्टम के पैकेज मैनेजर में "गिट-सबट्री" के लिए खोजें और यदि यह मौजूद है तो पैकेज इंस्टॉल करें। यदि नहीं, या यदि आप गिट के पुराने संस्करण का उपयोग कर रहे हैं, तो मुझे सबसे आसान तरीका यह है कि लेखक के repo से गिट-सबट्री इंस्टॉल करना है।

git clone https://github.com/apenwarr/git-subtree.git 
cd git-subtree/ 
make install 

एक बार जब आप इसे स्थापित करने के लिए, आप विभिन्न शांत बातें इसके साथ के रूप में docs में विस्तार से बताया कर सकते हैं।

+0

पूरी तरह से काम किया। धन्यवाद दोस्त। – Lawren

+2

क्या वही काम करने का कोई तरीका है, लेकिन जब बिल्ड फाइलें या 'dist' 'gitignore' में है और मास्टर से बाहर रखा गया है? स्पष्टीकरण के लिए, मैं केवल तैनाती शाखा में dist फ़ाइलों को चाहता हूं, और मास्टर में केवल src फ़ाइलों को चाहता हूं। – Lawren

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