2010-08-18 10 views
5

मेरे उपयोग के मामले में कुछ this की तरह एक बहुत से शुरू होता है; एक टीम के एक केंद्रीय भंडार का उपयोग करता है (मेरे मामले में यह तोड़फोड़ है, लेकिन मेरा मानना ​​है कि अगर यह git गया मुद्दा ही होगा), और फ़ाइलों में से कुछ सदस्य-निजी हैं (Django स्थानीय सेटिंग्स फाइलें, आईडीई निजी परियोजना वरीयताओं आदि) । जबकि निजी फ़ाइल निजी रहनी चाहिए - यानी, मैं नहीं चाहता हूं कि मैं इसे धक्का या डिमांड करने के लिए किए गए परिवर्तनों को चाहता हूं - मैं चाहता हूं कि फ़ाइल ट्रैक हो और संस्करण नियंत्रित हो।मैं फ़ाइल को निजी रूप से ट्रैक करने के लिए गिट (या कुछ अन्य dvcs) कैसे बता सकता हूं?

सबसे अच्छा विकल्प डिफ़ॉल्ट रूप से फ़ाइल निजी रखने के लिए एक तरह से हो सकता है; एक कामकाज निजी प्रतिबद्धता रखने का एक तरीका होगा - निजी फाइल को अलग से याद रखने के लिए याद रखना एक उपद्रव होगा, लेकिन इसे ट्रैक करने में सक्षम नहीं होने के बावजूद अभी भी बेहतर है।

सुझाए गए समाधानों की तुलना में: this और this अच्छे नहीं हैं क्योंकि वे फ़ाइल को बिल्कुल भी करने से रोकते हैं; यह वह नहीं है जिसकी मुझे चाहत है। मैं इसे स्थानीय रूप से प्रतिबद्ध करना चाहता हूं; मैं बस इसे प्रकाशित नहीं करना चाहता हूं।

Btw - जब मैं DVCSs प्यार करता हूँ, और Git एक तरह-के डिफ़ॉल्ट, मैं विशेष रूप से यह (यमक अनपेक्षित) के लिए प्रतिबद्ध नहीं लग रहा है किया गया है; अगर केवल एचजी या बीजीआर ऐसा कर सकता है, तो मेरे लिए स्विच करने के लिए पर्याप्त कारण हो सकता है।

उत्तर

1

मैं एक सेटिंग्स फ़ोल्डर और इसे नीचे प्रत्येक उपयोगकर्ता के लिए एक फ़ोल्डर के लिए सिफारिश करेंगे। यदि आपके पास एक सभ्य ओएस है तो लॉग इन उपयोगकर्ता के नाम के साथ एक पर्यावरण चर है।

आपका निर्देशिका संरचना तो हो जाएगा:

Project 
/Settings 
/User1 
/User2 
/User3 

अब हर चीज में चेक किया गया है और प्रत्येक उपयोगकर्ता अपनी निर्देशिका है। अगला चरण आपकी बिल्डस्क्रिप्ट, प्रोजेक्टफाइल, और स्क्रिप्ट्स या जो भी पर्यावरण परिवर्तक का उपयोग कर उपयोगकर्ताओं के विशिष्ट भाग का उपयोग करना है।

2

जिस तरह से मैंने इसे प्रबंधित किया है, और मुझे नहीं पता कि यह आपकी स्थिति में स्वीकार्य होगा, एक टेम्पलेट फ़ाइल बनाना है, उदाहरण के लिए settings.txt.template जो प्रतिबद्ध रेपो में रहता है। और उसके बाद अपनी व्यक्तिगत फ़ाइल को स्थानीय रूप से सेट करें (settings.txt .gitignore फ़ाइल में जोड़ा गया है)।

नहीं तो आप Git submodules http://book.git-scm.com/5_submodules.html

+0

+1 उपेक्षा पुनर्स्थापित करेगा। – sampablokuper

1

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

1

शायद आप अपनी फ़ाइलों को एक अलग गिट फ़ोल्डर में स्टोर कर सकते हैं और एक प्रतीकात्मक लिंक का उपयोग कर सकते हैं जो कि है।

2

कैसे उपयोगकर्ता वरीयताओं के साथ एक पर ध्यान नहीं दिया सबफ़ोल्डर होने के बारे में? Schoetbi के समान सुझाव देता है, लेकिन केवल एक ही फ़ोल्डर, प्रत्येक उपयोगकर्ता के लिए नहीं।

/Project 
    /Foo 
    /Bar 
    /Preferences 

/Project/.gitignore में, लाइन /Preferences अनदेखी करने के लिए/परियोजना/प्राथमिकताएं। और/परियोजना/प्राथमिकताओं में 'गुप्त' रेपो शुरू करें। (मैं इसे गुप्त कह रहा हूं क्योंकि बाहरी रेपो को इसके बारे में पता नहीं है।) यदि अन्य सॉफ़्टवेयर मुख्य रेपो के हिस्से में किसी निश्चित रूप से इसकी प्राथमिकता फ़ाइलों की अपेक्षा करता है, तो आप/परियोजना/प्राथमिकताओं में किसी चीज़ के लिए सिम्लिंक बना सकते हैं फ़ोल्डर।सिम्लिंक को ट्रैक किया जा सकता है या नहीं; यह समय के साथ अधिकतर स्थिर होना चाहिए, इसलिए आप इसके इतिहास की परवाह नहीं करेंगे, और इसका इतिहास मुख्य परियोजना से स्वतंत्र होगा, इसलिए शायद मैं इसे अनदेखा कर दूंगा।

आपको नीचे/परियोजनाओं की आवश्यकता नहीं है, लेकिन इसे काम करने के लिए सिम्लिंक विचार के लिए परियोजना के सापेक्ष एक स्थान में होना चाहिए, इसलिए मैं इसे नीचे रखूंगा। जब तक बाहरी भंडार आंतरिक को अनदेखा कर रहा है, तब तक एक और भंडार के नीचे एक भंडार शुरू करना बिल्कुल ठीक है। मैं इसे अपने ~ फ़ोल्डर के नीचे अपने ~ फ़ोल्डर और परियोजनाओं के साथ करता हूं।

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

0

या, शायद, Git इस फ़ाइल के परिवर्तनों को अनदेखा करने की बता:

git update-index --assume-unchanged <file name> 
0

mine Git के लिए ऐसा करता है, और यह SVN के लिए ठीक से काम करना चाहिए यदि आप एक वैश्विक SVN *_mine_* के लिए नियम की अनदेखी जोड़ें।

अस्वीकरण: यह डिफ़ॉल्ट रूप से नहीं संस्करण करता है, लेकिन आप बैकअप है और कुछ भी मेल खाता है *_mine_* submodules उल्लेख के लिए नियम

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

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