2011-02-14 40 views
5

मेरे पास स्थानीय विकास और उसके आशुोक शाखा को हेरोकू में तैनात करने के लिए एक मास्टर शाखा है। मेरे पास एक conf फ़ाइल है जिसे मैं अनदेखा करता हूं और मास्टर के कारण यह जांच नहीं करता कि यह निजी है, लेकिन इसे हेरोकू शाखा में अनदेखा नहीं किया गया है और इसे रेपो में जोड़ा गया है क्योंकि Heroku सर्वर को इसे काम करने की आवश्यकता है।गिट को अनदेखा फ़ाइलों को हटाने से रोकें

समस्या: मैंने देखा कि जब मैंने मास्टर से हेरोकू में गिट चेकआउट किया था, तो उसने मास्टर से मेरी conf फ़ाइल हटा दी। Heroku conf फ़ाइल ने मास्टर पर उसी फ़ाइल को स्वचालित रूप से ओवरराइट किया होगा और चूंकि उस फ़ाइल को अनदेखा किया जा रहा था, गिट ने मुझे चेतावनी नहीं दी थी कि मेरे पास असामान्य परिवर्तन थे, जो मैंने किया ... shucks ...

कैसे करें मैं इस तरह की चीज को होने से रोकता हूं? क्या इसके बारे में चेतावनी पाने का कोई तरीका है, या शायद मुझे चीजों को प्रबंधित करने के तरीके को ट्विक करना चाहिए।

उत्तर

2

यदि आप चीजों को प्रबंधित करने के तरीके को बदलने के लिए खुले हैं, तो मैं आपकी सभी निजी कॉन्फ़िगरेशन के लिए पर्यावरणीय चर सेट अप करने की सलाह दूंगा। हेरोोकू उनका समर्थन करता है और वे ओपन सोर्स प्रोजेक्ट्स के लिए तैनाती और रिपोजिटरी सेटअप को बहुत सरल बनाते हैं (http://devcenter.heroku.com/articles/config-vars देखें)।

1

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

Workflow: 
Master -> Work -> Heroku 

इस मामले में, आप Work में विन्यास फाइल की जाँच करेगा, किसी भी अन्य निजी फ़ाइलों के साथ। प्रतिबद्ध करने के लिए, आपको उन सभी कामों के साथ काम पर मास्टर और उपयोगकर्ता cherry-pick पर जाने की आवश्यकता है जो निजी नहीं हैं। मैं सब करता है कि एक स्क्रिप्ट मैं pull-work.sh

फोन इस तरह में NOCOMMIT: के साथ शुरू और निर्माण नहीं है कि का उपयोग करें, आप config फाइलों के साथ DVCS कि रूप में अच्छी तरह से से अलग संस्करणीकृत किया जा सकता है की मॉडल नहीं टूटते रिमोट रिपोजिटरी।

यहां pull-work.sh है। यह एक और एसओ उपयोगकर्ता द्वारा मेरे समान में से एक पर विकसित किया गया था, हालांकि पर्याप्त, प्रश्नों के बावजूद।

#!/bin/sh 

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2` 
if [ $BRANCH != "master" ]; then 
    echo "$0: Current branch is not master" 
    exit 1 
fi 

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick 
+0

+1 लेकिन आपके द्वारा उल्लिखित प्रश्न पर वापस एक लिंक अच्छा होगा –

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