2011-10-21 13 views
10

मैं अपने बिबटेक्स-डेटाबेस और पीडीएफ को संभालने के लिए कुछ स्क्रिप्ट विकसित करता हूं।गिट पुश केवल एक भंडार का हिस्सा

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

मैंने एक जिथब-शाखा होने और केवल इस शाखा को धक्का देने के बारे में सोचा था। लेकिन मास्टर शाखा में लिपियों के साथ किए गए कार्यों के साथ मैं शाखा को कैसे अपडेट करूं?

क्या ऐसा करने के कोई अन्य तरीके हैं?

उत्तर

1

लेकिन मैं मास्टर शाखा में लिपियों के साथ किए गए कार्यों के साथ शाखा को कैसे अपडेट करूं?

Cherry-pick सार्वजनिक शाखा में master से स्क्रिप्ट से संबंधित करता है। या, स्क्रिप्ट को अपनी शाखा में संपादित करें, फिर जब आपको उनकी आवश्यकता हो तो master में परिवर्तनों को मर्ज करें।

+0

लेकिन क्या चेरी-पिकिंग केवल इस प्रतिबद्धता में किए गए परिवर्तन नहीं मिलेगी? मान लीजिए कि मैंने मास्टर में कई काम किए हैं, कुछ स्क्रिप्ट के लिए कुछ डीबी से संबंधित हैं, मुझे सभी स्क्रिप्ट-संबंधित लोगों को चुनना होगा, सही (न केवल नवीनतम)? मुझे लगता है कि अलग-अलग शाखा-विलय बेहतर विकल्प है ... – thias

+0

@thias: यही कारण है कि मैं 'मास्टर' की बजाय सार्वजनिक शाखा में लिपियों को विकसित करने की सिफारिश करता हूं। या अलग repos का उपयोग ... –

+0

ठीक है, मैं एक अलग शाखा का उपयोग करें ... – thias

9

आप स्क्रिप्ट निर्देशिका को अपनी शाखा में विभाजित करने के लिए git subtree का उपयोग कर सकते हैं (उस उपनिर्देशिका के लिए पूर्ण इतिहास के साथ) जिसे आप गिटहब पर दबा सकते हैं। स्प्लिट रिपोजिटरी को अद्यतित रखने के लिए आप फिर से गिट सबट्री चला सकते हैं।

एक उदाहरण देने के लिए, एक बार आप git subtree स्थापित किया है तुम कर सकते हैं:

git subtree split --prefix script-directory --branch just-scripts 
git push github-scripts just-scripts:master 

... यह सोचते हैं कि अपनी स्क्रिप्ट script-directory में हैं, और github-scripts एक दूरस्थ कि आपके GitHub का URL को इंगित करता है केवल स्क्रिप्ट के लिए जिम्मेदार भंडार।

+0

यह दिलचस्प लग रहा है! लेकिन मैं नई शाखा कैसे अपडेट करूं? या फिर मैं अगले पुश के लिए फिर से कमांड को चलाने और चलाने के बाद इसे हटा दूंगा? – thias

+0

आप शाखा को हटाने के बिना फिर से वही आदेश चला सकते हैं और इसे अपडेट करना चाहिए (मुझे लगता है)। –

+0

@ मार्क, बस आश्चर्य कीजिए, क्या यह एक पंक्ति में ऐसा करना संभव है - सादगी के लिए गिट पुश - एसप्लिट उपदिर जैसे कुछ। – shabunc

1

मैंने @ लार्समैन द्वारा दी गई सलाह का पालन किया और यह बहुत सुविधाजनक साबित हुआ।


## getting the scripts into a separate branch for github 

# create a root branch 'scripts' 
git symbolic-ref HEAD refs/heads/scripts 
rm .git/index 
git clean -fdx # WARNING: all non-commited files, checked in or not, are lost! 
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts" 
git checkout master 
git merge scripts 

# push the scripts branch to github 
$ git remote add github [email protected]:username/repo.git 
$ git push github scripts 

अब मैं स्क्रिप्ट शाखा में विकसित करने और मास्टर शाखा के साथ विलय के लिए जब भी मैं अपने डेटाबेस के लिए इसकी आवश्यकता कर सकते हैं: यहाँ प्रक्रिया के लिए कुछ और जानकारी कर रहे हैं।

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

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