Gentoo के तहत /-etc (जिसे डिस्पैच-कॉन्फ़िडेंस कहा जाता है) को पैकेज-प्रेरित परिवर्तनों को प्रबंधित करने के लिए rcs परिवर्तनों को ट्रैक करने के लिए समर्थन करता है, लेकिन यह वास्तव में शक्तिशाली है।
मैं अपने / आदि के माध्यम से संस्करण करना चाहता हूं git
, खासकर जब से मैं विभिन्न शाखाओं का उपयोग करके संभव के रूप में अलग-अलग वितरणों के रूप में संभव के रूप में एक ही स्थान पर एक से अधिक सामान रखते हुए (कुछ क्षेत्रों के लिए स्पष्ट रूप से विफल रहता है, अपाचे कॉन्फ़िगरेशन) उदाहरण के लिए वास्तव में अलग-अलग वितरणों में भिन्न है)। यह इस तरह काम करता है:
master
मेरी डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलों के साथ मेरा रेपो है। अब मैं एक नए डिस्ट्रो के संपर्क में आता हूं, इसलिए मैं अपनी master
शाखा के आधार पर एक नई शाखा बनाता हूं जो वितरण के नाम (इस उदाहरण के उदाहरण में) पर आधारित है। डेबियन मेरे स्थान से कुछ कॉन्फिग फाइल को अपने से अलग रखता है master
इसलिए मैं ए git mv file new_loc
। और सब कुछ ठीक है। मैं master
उस फ़ाइल पर वापस जाता हूं और उस फ़ाइल को बदल देता हूं क्योंकि मैंने कुछ विशिष्ट कॉन्फ़िगरेशन निर्देश जोड़े हैं, जब मैं master
अपनी debian
शाखा में विलीन हो जाता हूं तो स्थानांतरित फ़ाइल बदल जाती है, इसलिए मैं मूल रूप से अपनी master
शाखा के भीतर अधिकांश चीजों को बदल सकता हूं और बस मेरे "वितरण" में परिवर्तन को मर्ज करना होगा। शाखाएं (आमतौर पर वे वितरण और उद्देश्य शाखाओं के मिश्रण से अधिक होती हैं, एक डेबियन सर्वर में डेबियन वर्कस्टेशन के कुछ अंतर स्पष्ट रूप से होते हैं लेकिन विशेषताएं अभी भी काम करती हैं)।
इसलिए मूल रूप से मेरे पास एक "जेनेरिक कॉन्फ़िगरेशन" है master
(इसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग शब्दों में कहने के लिए) उन्हें मेरी शाखाओं में विरासत में मिला है (जो एक दूसरे से विरासत में भी प्राप्त कर सकते हैं)।
इसके अलावा, git
"चेरी-पिक" करने के लिए तंत्र काम करता है (इस मामले में / आदि में परिवर्तन /) मेरे लिए काफी सहायक रहा है, जहां मुझे केवल एक निश्चित कॉन्फ़िगरेशन के कुछ हिस्सों की आवश्यकता थी।
अब आपके कुछ विचारों को:
- अगर मुझे अधिक पैकेज प्रबंधक एकीकरण की आवश्यकता होती है, तो मैं संभवतः इसके लिए रैपर स्क्रिप्ट का उपयोग करूंगा (फिलहाल मैं नहीं)।
- अपस्ट्रीम संस्करणों को एक शाखा के रूप में मानने से ठीक काम होगा
git
, यह सिर्फ एक और शाखा है जिसे आप कभी-कभी (आंशिक रूप से) मर्ज करते हैंmaster
- Git में अनदेखी सूची फ़ाइल है। आपके रेपो में .ignignore इसलिए कवर किया गया है।