अगर मुझे आपकी समस्या अच्छी तरह से समझ में आ गई है, तो आप निम्नलिखित बातें चाहते हैं:
- अपनी मीडिया फ़ाइलों को एक एकल गिट रिपॉजिटरी में संग्रहित करें, जिसका उपयोग कई परियोजनाओं द्वारा किया जाता है
- यदि आप अपने स्थानीय मशीन के किसी भी प्रोजेक्ट में मीडिया फ़ाइल को संशोधित करते हैं, तो उसे तुरंत हर दूसरे प्रोजेक्ट में दिखाई देना चाहिए (इसलिए आप हर समय + पुश + खींचना नहीं चाहते)
दुर्भाग्य से आप जो चाहते हैं उसका कोई अंतिम समाधान नहीं है, लेकिन कुछ चीजें हैं जिनके द्वारा आप अपने जीवन को आसान बना सकते हैं।
सबसे पहले आपको एक महत्वपूर्ण बात तय करनी चाहिए: क्या आप अपने प्रोजेक्ट रिपॉजिटरी में हर संस्करण के लिए स्टोर करना चाहते हैं मीडिया फ़ाइलों के संस्करण का संदर्भ? उदाहरण के लिए यदि आपके पास example.com नामक एक परियोजना है, तो क्या आपको पता है कि 2 सप्ताह पहले किस शैली का उपयोग किया गया था, या नवीनतम हमेशा (या अधिकतर) सबसे अच्छा है?
यदि आपको यह जानने की आवश्यकता नहीं है कि, समाधान आसान है:
- मीडिया फ़ाइलों और प्रत्येक प्रोजेक्ट के लिए एक रिपॉजिटरी बनाएं
- अपनी परियोजनाओं में एक प्रतीकात्मक लिंक बनाएं जो स्थानीय रूप से क्लोन मीडिया रिपॉजिटरी की ओर इशारा करते हैं। आप या तो एक रिश्तेदार प्रतीकात्मक लिंक (जैसे ../media) बना सकते हैं और यह मान सकते हैं कि हर कोई परियोजना की जांच करेगा ताकि मीडिया निर्देशिका एक ही स्थान पर हो, या सांकेतिक लिंक का नाम .gitignore में लिख दें, और हर कोई तय कर सकता है। वह मीडिया फाइल रखता है।
हालांकि, अधिकांश मामलों में, आप इस संस्करण की जानकारी जानना चाहते हैं। इस मामले में आपके पास दो विकल्प हैं:
हर प्रोजेक्ट को एक बड़े भंडार में स्टोर करें। इस समाधान का लाभ यह है कि आपके पास मीडिया रिपॉजिटरी की केवल 1 प्रति होगी। बड़ा नुकसान यह है कि परियोजना संस्करणों के बीच स्विच करना बहुत कठिन है (यदि आप एक अलग संस्करण की जांच करते हैं तो आप हमेशा सभी परियोजनाओं को संशोधित करेंगे)
सबमॉड्यूल का उपयोग करें (जैसा कि उत्तर 1 में समझाया गया है)। इस तरह से आप मीडिया फ़ाइलों को एक रिपॉजिटरी में संग्रहीत करेंगे, और प्रोजेक्ट में केवल विशिष्ट मीडिया रेपो संस्करण का संदर्भ होगा। लेकिन इस तरह आपके पास आम तौर पर मीडिया रिपॉजिटरी की कई स्थानीय प्रतियां होंगी, और आप आसानी से सभी परियोजनाओं में मीडिया फ़ाइल को संशोधित नहीं कर सकते।
अगर मैं तुम होते तो मैं शायद पहला या तीसरा समाधान (प्रतीकात्मक लिंक या सबमॉड्यूल्स) चुनता। यदि आप सबमोडुल्स का उपयोग करना चुनते हैं तो आप अपने जीवन को आसान बनाने के लिए बहुत कुछ कर सकते हैं:
कमिट करने से पहले, आप सबमॉड्यूल डायरेक्टरी का नाम बदल सकते हैं और एक आम मीडिया डायरेक्टरी में एक सिमलिंक लगा सकते हैं। जब आप प्रतिबद्ध होने के लिए तैयार होते हैं, तो आप सीमलिंक को हटा सकते हैं और सबमॉड्यूल को वापस निकाल सकते हैं, और फिर प्रतिबद्ध कर सकते हैं।
आप मीडिया रिपॉजिटरी की अपनी एक कॉपी को अपनी सभी परियोजनाओं में एक रिमोट रिपॉजिटरी के रूप में जोड़ सकते हैं।
आप इस तरह से रिमोट के रूप में स्थानीय निर्देशिका जोड़ सकते हैं:
cd /my/project2/media
git remote add project1 /my/project1/media
यदि आप / my / project1 / मीडिया में किसी फ़ाइल को संशोधित करते हैं, तो आप इसे कर सकते हैं और इसे / my / project2 / media से बिना किसी दूरस्थ सर्वर पर धकेल दिए:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
आप इन कमिटों को बाद में हटाने के लिए स्वतंत्र हैं (गिट रीसेट के साथ) क्योंकि आपने उन्हें अन्य उपयोगकर्ताओं के साथ साझा नहीं किया है।