2010-03-01 13 views
5

मैं Git उपयोग कर रहा हूँ एक परियोजना तोड़फोड़ में होस्ट के खिलाफ विकसित करने के लिए, का उपयोग कर Git-SVN काम कर प्रतिबद्ध के सेट बनाए रखना मास्टर शाखा पर है, तो के माध्यम से SVN भंडार के लिए प्रतिबद्ध:स्थानीय साथ Git-svn

git stash 
git svn dcommit 
git stash apply 

स्थानीय संशोधन है कि 'गुप्त कोष' कमांड संरक्षण है से एक है कि मैं SVN भंडार के लिए प्रतिबद्ध नहीं करना चाहते, एक बदली हुई डेटाबेस है संबंध तार। अतिरिक्त 'स्टैश' चरणों के बिना इस स्थानीय परिवर्तन को रखने का सबसे सुविधाजनक तरीका क्या है?

मुझे संदेह है कि 'स्टैश' या 'रजाई' जैसी कुछ चीज़ जो मैं ढूंढ रहा हूं, लेकिन मैं अभी भी गिट करने के लिए पर्याप्त नया हूं, मुझे लगता है कि मुझे कुछ शब्दावली याद आ रही है जो सटीक incantation की ओर ले जाएगा।

अद्यतन: एकमात्र समाधान मैंने पाया कि git stash + git-svn action + git stash apply श्रृंखला से बचने के लिए लगता है मैन्युअल रूप से Git-svn रेफरी अद्यतन करने के लिए किया गया था:

(check in local-only change to 'master', then...) 
$ cat .git/refs/master > .git/refs/remote/git-svn 
$ git svn fetch (with at least one new SVN revision) 

और वह छोड़ देता है-केवल स्थानीय रूप में प्रतिबद्ध एक अजीब (शायद असुरक्षित) दो svn संशोधन के बीच प्रतिबद्ध है।

उत्तर

1

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

मर्ज विवादों को हल करने का कोई साफ तरीका नहीं है जो तब हो सकता है जब संपत्ति का नाम बदल दिया जाए। तो मुझे लगता है कि आप एक खराब कार्यान्वित समाधान के लिए एक हैक देख रहे हैं और इसीलिए आपके प्रश्न का कोई सीधा जवाब अचूक प्रतीत नहीं होगा।

0

नहीं वास्तव में अपने प्रश्न का एक Git जवाब है, लेकिन फिर भी उपयोगी:

यह Django हलकों में एक मानक अभ्यास है कि भंडार कहा जाता है, localsettings में नहीं है एक स्थानीय फ़ाइल में डेटाबेस कनेक्शन आदि शामिल करने के लिए है। पीई

यह फ़ाइल आपके द्वारा तैनात प्रत्येक वातावरण के लिए अद्वितीय है; यह रेपो के साथ एक उदाहरण फ़ाइल को शामिल करने में मदद करता है, कहें, localsettings.py.example

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

+0

बस दूसरे दिन, मैंने एसवीएन पक्ष के मुख्य डेवलपर से कहा कि मैं वही पसंद करता हूं (भंडार से डीबी सेटिंग्स को ध्यान में रखते हुए)। अफसोस। प्लस (जैसा कि मुझे लगता है कि आप स्वीकार कर रहे हैं) समस्या बनी हुई है। "डेटाबेस कनेक्शन स्ट्रिंग" के लिए परीक्षण के दौरान "लंबे समय से चलने वाले फ़ंक्शन को एक लंबे समय से चलने वाले फ़ंक्शन को" टिप्पणी के दौरान कॉल करने की आवश्यकता नहीं है, जिसे मैं प्रतिबद्ध नहीं करना चाहता हूं (लेकिन लगातार पुन: लागू नहीं करना चाहता)। – benizi

0

मैं गिट svn के साथ stg (जो रजाई है लेकिन गिट के साथ एकीकृत) का उपयोग करता हूं।

मेरे पास एसटीजी में पैच है जो बिल्ड सिस्टम को इस तरह से पैच करता है कि मैं अपस्ट्रीम भेजना नहीं चाहता - ताकि आपके डीबी पैच की तरह।

पैच लागू करने के लिए:

STG पॉप -एक STG धक्का पैच-नाम-कि-ए-करना-चाहते-लागू Git SVN dcommit

या नवीनतम SVN के खिलाफ rebase करने के लिए:

git svn fetch एसजीजी रीबेज ट्रंक (या जो भी आपकी एसवीएन शाखा कहा जाता है)

+0

यह आशाजनक प्रतीत होता है, लेकिन मुझे वास्तव में यह नहीं दिखता कि यह कैसे बेहतर है: (1) 'गिट स्टेश' (2) 'गिट एसवीएन fetch' (3)' गिट स्टेश लागू '। अभी भी वही है "तीन चीजें करना है" समस्या है। – benizi

+0

यदि आप विशेष रूप से उन तीन आदेशों में टाइप करने के लिए हटा रहे हैं, तो उन्हें करने के लिए एक शेल-स्क्रिप्ट एक बहुत ही गिट-जैसी चीज है। गिट में उच्च स्तर की चीजें बहुत कम स्तर की सामग्री के आसपास खोल स्क्रिप्ट के रूप में उत्पन्न हुईं ('पर्सनलिन' जो 'प्लंबिंग' के आसपास जाती है) एक विशिष्ट आवश्यकता को संबोधित करने के लिए ... –

+0

ओह, इस टिप्पणी को याद किया। नहीं, यह समस्या-दर-प्रकार की समस्या नहीं है जो मुझे खराब करता है। इस अवधारणा के बजाय कि पैच स्थानीय इतिहास के हिस्से के रूप में "वास्तव में" दर्ज नहीं किया गया है। जो काम मैंने पोस्ट किया है वह इससे बचाता है; स्थानीय पैच गिट-एसवीएन शाखा में एकीकृत है, लेकिन एसवीएन रेपो में चेक नहीं किया गया है। लेकिन यह हैकिश लगता है। – benizi

2

एक संभावित दृष्टिकोण स्थानीय-केवल संशोधनों के साथ "स्थानीय" शाखा होना है, और एक "कार्य" शाखा इससे खेत इस सेटअप आप कर सकते हैं में:

git checkout work 
git checkout -b work_tmp 
git rebase --onto master local work_tmp 
git checkout master 
git merge work_tmp 
git branch -D work_tmp 
git svn dcommit master 

(और इसके लिए एक खोल स्क्रिप्ट, स्वाभाविक रूप से बनाने)

मैं सिर्फ एक परियोजना पर इस का उपयोग शुरू किया और वहाँ इस विधि के लिए कमियां हो सकती है।

+0

मैं इसके साथ बहुत कुछ करता हूं, लेकिन मैं सिर्फ "डीबग" शाखा रखता हूं जिसे मैं मास्टर पर रीबेस करता हूं जब मुझे अपनी व्यक्तिगत सेटिंग्स की आवश्यकता होती है। –

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