कहें कि मेरे पास एक परियोजना है जो सार्वजनिक ओपन-सोर्स रेपो और एक निजी विकास रेपो दोनों पर स्थित है। विकास रेपो पर कुछ फाइलों में डेटाबेस पासवर्ड जैसे सामान शामिल होंगे और ऐसा कि मैं सार्वजनिक नहीं चाहता हूं। दो रिमोट्स के बीच सुरक्षित फ़ाइलों को साझा करने का सबसे अच्छा तरीका क्या होगा? मैं कुछ प्रकार की .gitignore फ़ाइल सोच रहा हूं जो केवल सार्वजनिक रेपो पर लागू होती है, क्या यह संभव है? यदि नहीं, तो कोई अन्य सुझाव?चुनिंदा गिट रिमोट द्वारा अनदेखा?
उत्तर
स्रोत नियंत्रण, अवधि में पासवर्ड न डालें। बस .gitignore
उन्हें हर जगह; अन्य माध्यमों से निजी पासवर्ड फ़ाइल वितरित करें।
(और कोई, वहाँ केवल कुछ खजाने में फ़ाइलों को अनदेखा करने के लिए एक तरीका नहीं है।)
यह मदद नहीं करता है। हमें रेपो में हमारी तैनाती विन्यास की आवश्यकता है ताकि हम उन्हें आवश्यकतानुसार बदल सकें और हर कोई जान सके, और हमारा उत्पादन वातावरण गिट-आधारित है, इसलिए तैनात करने के लिए आवश्यक सभी फाइलों को निजी रेपो में उपलब्ध होना आवश्यक है। निजी कारणों का कोई कारण नहीं है जैसे कि निजी स्रोत नियंत्रण में नहीं होना चाहिए। –
@ स्टीफन: समस्या यह है कि गिट कैसे काम करता है, यदि आप एक भी फ़ाइल को बदलते हैं, तो आपके पास प्रतिबद्ध हैश का एक पूरी तरह से अलग सेट है, और इस प्रकार एक पूरी तरह से अलग इतिहास है। गिट इतिहास स्तर पर आपके सार्वजनिक भंडार और आपके निजी भंडार के बीच अंतर नहीं करता है। – Amber
@ स्टीफन: आप * क्या कर सकते हैं * एक अलग शाखा रखती है जिसमें एक प्रतिबद्धता है जो आपकी निजी फाइलों में जोड़ती है, और उस शाखा को सार्वजनिक भंडार में कभी प्रकाशित नहीं करती है। जब ओपन-सोर्स भाग अपडेट किया जाता है, तो आप इसे 'निजी' शाखा में विलय कर सकते हैं और निजी फाइलें बरकरार रखी जाएंगी। – Amber
हो सकता है, एक अलग रेपो में अधिक संवेदनशील फ़ाइलें डाल मूल रेपो में यह submodule और केवल अपने निजी डेवलपर्स देना निजी रेपो तक पहुंच।
यदि वास्तव में फाइलें हैं, तो जनता को रिसाव नहीं करना चाहिए, प्रतिभूतियों के लिए, उन्हें भंडार में न रखें, या फ़ाइलों को पासवर्ड से एन्क्रिप्ट करें!
BASE_DIR/.git
BASE_DIR/private/.git
यहाँ BASE_DIR सभी सार्वजनिक फ़ाइलें हैं:
बेस्ट, जब आप एक अलग भंडार है कि निजी विकास संस्करण के भीतर रह सकते में साझा नहीं की फ़ाइलें डाल है। BASE_DIR/निजी में निजी फाइलें हैं।
तुम सिर्फ डेटा और नहीं रिपोजिटरी (अपने सभी इतिहास के साथ) प्रकाशित करते हैं, आप कर सकते हैं एक नया संस्करण आता है बस
git --work-tree=PATH_TO_THE_PUBLIC checkout HEAD -- .
जब।
यह आमतौर पर फ़िल्टर ड्राइवर के साथ संभाला जाता है, जैसे http://stackoverflow.com/questions/3318043/mark-a-file-in-the-git-repo-as-temporally-ignored/3318202#3318202 – VonC