2010-07-29 26 views
9

में फ़ाइलों की सुरक्षा करना मेरे पास उन फ़ाइलों के सबसेट के साथ एक केंद्रीय भंडार है जिसे मैं अन्य उपयोगकर्ताओं से बदलना (धक्का देकर) से बचाने के लिए चाहता हूं। अगर मैं इन फ़ाइलों को .gitignore में जोड़ता हूं, तो उन्हें क्लोन नहीं किया जाएगा।गिट रिपॉजिटरी

क्या सभी फ़ाइलों को क्लोन करने की क्षमता देना संभव है, लेकिन क्लोनिंग के बाद उनमें से कुछ को क्लाइंट साइड पर .gitignore पर जोड़ें?

+0

क्या .gitignore भंडार के लिए प्रतिबद्ध है? आप उन फ़ाइलों की रक्षा क्यों करना चाहते हैं? क्या .gitignore किसी भी प्रकार की प्रति उपयोगकर्ता पहुंच जोड़ता है, या आपके परिवर्तन का मतलब है कि * कोई भी * उन फ़ाइलों को बदल सकता है? आप क्या खत्म करने की कोशिश कर रहे हैं? –

+0

क्या यह उन फ़ाइलों को संशोधित करने वाले पुश को अस्वीकार करने का विकल्प होगा? आप खराब कामों को अस्वीकार करने के लिए क्लाइंट-साइड हुक भी पेश कर सकते हैं। – Cascabel

उत्तर

0

मैं शुरू में के बारे में filter driver (देखें Pro Book) सोचा, जो होगा:

  • धब्बा कदम पर साफ कदम पर अपनी फ़ाइलें सामग्री
  • बचाने के लिए अपनी फ़ाइलें सामग्री बहाल होगा।

alt text

लेकिन वह एक अच्छा समाधान नहीं है, क्योंकि उन स्क्रिप्ट के बारे में राज्यविहीन फ़ाइल सामग्री परिवर्तन (this SO answer देखें) कर रहे हैं।

आप हुक में एक सहेजने/पुनर्स्थापित तंत्र को लागू करने का प्रयास कर सकते हैं (एक ही SO उत्तर देखें), लेकिन ध्यान दें कि यह आपके रेपो के लिए स्थानीय होगा (यह आपकी फ़ाइलों को केवल आपके रेपो में ही सुरक्षित रखेगा, हुक को धक्का नहीं दिया जाता है)

तुम भी उपयोग कर सकते हैं:

git update-index --assume-unchanged file 

"With git, temporary exclude a changed tracked file from commit in command line" फिर से केवल एक स्थानीय सुरक्षा देखें। इससे उन्हें आपके रेपो ("आयात") पर बाहरी धक्का के खिलाफ सुरक्षा मिलेगी, लेकिन यदि आप क्लाइंट साइड पर संशोधित किए जा सकने के बजाय उन्हें "निर्यात") प्रकाशित करते हैं।

+0

धन्यवाद। मुझे गिट अपडेट-इंडेक्स - बेस्यूम-अपरिवर्तित के बारे में पता है, लेकिन यह केवल क्लाइंट साइड पर लागू होता है। मैं हुक के बारे में भी जानता हूं, लेकिन उन्हें केंद्रीय रेपो से क्लोन नहीं किया जाता है। – andrexus

+0

@andrexus: मुझे पता है: फ़िल्टर ड्राइवर एकमात्र धक्कादायक समाधान है, लेकिन इसे प्रासंगिक फ़ाइलों (सहेजने/पुनर्स्थापित करने के लिए) के पथ के बारे में जानने के लिए इसे धुंधला स्क्रिप्ट को झुकाव करने की आवश्यकता होगी, जबकि इसे केवल सामग्री के बारे में पता होना चाहिए फाइलों के ... – VonC

1

क्या कोई विशिष्ट कारण है कि गिट को इसका उत्तर क्यों होना चाहिए?

फ़ाइलों को केवल पढ़ने के लिए, और नीति के रूप में निर्देशित करने के बारे में कि इन फ़ाइलों को धक्का नहीं दिया जाना चाहिए?

कभी-कभी तकनीकी समाधान सबसे आसान तरीका नहीं है।

यदि कोई इन फ़ाइलों में परिवर्तन को पुश करता है, तो इन परिवर्तनों को हमेशा वापस किया जा सकता है।

1

आपके पास रिपॉजिटरी में फ़ाइलें हो सकती हैं, उन्हें प्रतिबद्ध करें, फिर उन्हें .gitignore में जोड़ें और फिर उन्हें अगली प्रतिबद्धता से हटा दें।

आप अभी भी फ़ाइलों को सीधे पहले प्रतिबद्ध कर सकते हैं (शायद इसे किसी चीज़ के साथ टैग करें ताकि इसे थोड़ा आसान नाम से लाया जा सके) और यह फ़ाइल की स्थिति को सुरक्षित रखेगा, जबकि इसे आसानी से भंडार में संपादित नहीं किया जा रहा है दुर्घटना।

क्लोन खींचने के बाद उन फ़ाइलों तक पहुंचने के लिए, बस एक रेक कार्य लिखें जो उन्हें आपके भंडार के उपयोगकर्ता के लिए लाता है।

1

यह मुझे लगता है कि अगर आपको इस प्रतिबंध प्रतिबंध के स्तर की आवश्यकता है तो समस्या कहीं और है।

फिर भी, यदि आप वास्तव में इसे कार्यान्वित करना चाहते हैं, तो Gitolite पर विचार करें। यह आपको विस्तृत पहुंच नियमों को परिभाषित करने की अनुमति देता है और शायद आपकी आवश्यकताओं के लिए पर्याप्त होना चाहिए।

Gitolite प्रलेखन: http://gitolite.com/gitolite/master-toc.html

आप परिभाषित कर सकते हैं 'आभासी refs' फ़ाइल स्तर पर पहुँच को नियंत्रित करने। उस पर और अधिक: http://gitolite.com/gitolite/vref.html

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