2010-05-18 21 views
7

अंततः मैंने गिट के लिए एसवीएन छोड़कर और इसे प्यार करके एक महान कदम उठाया। यह कहीं होना चाहिए, लेकिन मैं वास्तव में यह कैसे नहीं कर सकता, यह गिटोसिस अनुकूल है।गिट और रेल: डेटाबेस को अनदेखा करें।

मेरे पास रिमोट मशीन पर संग्रहीत मेरी रेपो साइट है। मैं अपनी कामकाजी प्रतिलिपि दबाता हूं और इस डेटा को उत्पादन मशीन पर खींचता हूं। एक महापौर अंतर हालांकि 'एक' फ़ाइल है: डेटाबेस.एमएलएल, जो उत्पादन मशीन पर कभी नहीं बदलेगा।

क्या यह संभव है (और यदि ऐसा है, तो कैसे), जब रेपो से डेटा खींचा जाता है, तो केवल इस फ़ाइल को "अनदेखा" करने के लिए? मैं इस बिंदु पर मैन्युअल रूप से ऐसा कर रहा हूं, लेकिन कुछ लालित्य की सराहना की जाएगी।

धन्यवाद।

उत्तर

5

मेरी सलाह: इसे गिट में भी न रखें। database.yml.skel या ऐसा कुछ बनाओ, ताकि उपयोगकर्ता अपने database.yml को मॉडल के साथ एक नमूना के रूप में पेश कर सके। हालांकि, मेरी राय में conf फ़ाइलें संस्करण नियंत्रण में नहीं हैं - बिल्कुल आपके कारण का उल्लेख करने के लिए।

अनदेखा करना बहुत आसान है: असल में, ऐसा करने के कई तरीके हैं। इस के लिए सही .gitignore फ़ाइल है; दूसरा एक .git/info/excludes है। विवरण के लिए this answer देखें।

तो, मेरे सिर के ऊपर से:

echo database.yml >> config/.gitignore 
git add config/.gitignore 
git commit 
+2

या .gitignore – shingara

+0

में config/database.yml डालें यदि कोई उपरोक्त कोड का उपयोग करता है और उनके पास पहले से ही एक .gitignore है, तो यह समाप्त हो जाएगा। मैं '>>' का उपयोग करने की सलाह देता हूं और केवल '>' का उपयोग करके पहली बार विफल रहता हूं। (यह निर्भर करता है कि आपका खोल कैसे कॉन्फ़िगर किया गया है, '>>' उन दोनों स्थितियों में काम कर सकता है जहां आपके पास फ़ाइल है और आप नहीं करते हैं।) तो पहली पंक्ति 'echo डेटाबेस.yml >> config/.gitignore' होगी। – iconoclast

+1

इसके अलावा, यदि डेटाबेस में पहले से ही repo में है तो यह अच्छा नहीं है। उस स्थिति को संभालने के तरीके के बारे में विवरण के लिए Evgeny का जवाब देखें। (मैंने अपने दृष्टिकोण का परीक्षण नहीं किया है: यह मेरा से थोड़ा अलग है, लेकिन आप मूल रूप से रेपो से फ़ाइल को हटा रहे हैं, इसलिए .gitignore लागू किया जा सकता है।) – iconoclast

8

हाँ, यह संभव है।

git update-index --skip-worktree FILENAME

या

git update-index --assume-unchanged FILENAME

जहां FILENAME अपने मामले के लिए config/database.yml होगा।

यदि आप दूसरे कमांड (मान-अपरिवर्तित) का उपयोग करते हैं, तो फ़ाइलें git reset कमांड के बाद वापस आ जाएंगी।

+2

क्या होगा यदि मैं उपरोक्त में से किसी भी आदेश को पूर्ववत करना चाहता हूं? – phoenixwizard

+0

गिट अपडेट-इंडेक्स --no-assume-unchanged FILENAME – Hartwig

6

इससे पहले कि आप उपेक्षा फाइल में यह उल्लेख किया था तो "database.yml" अपना Git रेपो को जोड़ा गया है, मुझे लगता है कि आप इसे दूर करने के लिए है: तो फिर

git rm config/database.yml 
git commit -a -m "Removed database.yml" 

, अपनी परियोजना में database.yml फ़ाइल जोड़ने ठीक काम करेगा।

+1

आप इसे अपनी डिस्क पर स्थानीय रखना चाहते हैं: 'git rm --cached config/database.yml' – Chloe

0

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

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