2009-05-19 9 views
10

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

स्थिति मूल रूप से है:

/proj/trunk/A/ 
/proj/trunk/B/ 
/proj/trunk/C/

हम संशोधन a..z पिछले रिलीज के बाद में जाँच की है। संशोधन डी, एफ, जी, और जे..एन में सी में एक नई सुविधा से संबंधित कार्य शामिल है जो समय पर पूरा नहीं होने वाला है। संशोधन ई, एच, और क्यू में सी में असंबंधित परिवर्तन होते हैं जिन्हें इस रिलीज में होना आवश्यक है। मैं /proj/branches/new-feature-for-C/ बनाना चाहता हूं और ट्रांजैक्शन में ई, एच, और क्यू रखते हुए, डी, एफ, जी, और जे .. में बदलावों को स्थानांतरित करना चाहता हूं। शाखा में किए जाने वाले परिवर्तनों और ट्रंक पर रखे जाने वाले परिवर्तनों के बीच कोई ओवरलैप नहीं है, और शाखा में स्थानांतरित किए जाने वाले किसी भी बदलाव को अंतिम रिलीज के बाद से किसी भी अन्य सबप्रोजेक्ट में किसी भी बदलाव पर निर्भर नहीं है।

उत्तर

10

इस प्रकार मैं इसे करूँगा: ट्रंक को एक शाखा में कॉपी करें, फिर परिवर्तन सेट को विलय करें।

तो ट्रंक http://svnserver/svn/myrepo/trunk/C पर है और अवांछित परिवर्तन सेट हैं 3, 6 , 9-11

svn copy http://svnserver/svn/myrepo/trunk/C http://svnserver/svn/myrepo/branch/C -m "Branch no completable work" 
svn merge -c -3,-6 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk> 
svn merge -r 11:8 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk> 
****CHECK EVERY THING WORKED*** 
svn commit . -m "Removed some changes that weren't to be finished" 

ध्यान दें कि -r 11:8 changeset आप

+0

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

+0

आप किस संस्करण का उपयोग कर रहे हैं? 1.5+ में यह काम करना चाहिए, हालांकि आप --reintegrate विकल्प का उपयोग करना चाह सकते हैं। 1.5 से पहले मैंने कुछ सफलता के साथ svnmerge.py स्क्रिप्ट का उपयोग किया है। –

+0

भंडार को अपग्रेड नहीं किया गया है, इसलिए मेरे पास 1.5+ मर्ज ट्रैकिंग सुविधाएं नहीं हैं। जिस समस्या में मैं दौड़ रहा हूं (और शायद यह कुछ है जो मैं गलत कर रहा हूं), यह है कि जब मैं फीचर शाखा को फिर से व्यवस्थित करने की कोशिश कर रहा हूं, तो ट्रंक से अपूर्ण सुविधा को हटाने और अन्य अर्थपूर्ण के बीच अंतर करने के लिए कुछ भी नहीं है इसके बाद ट्रंक पर हुए बदलाव। तो कॉपी किए गए सभी मौजूदा काम को हटा दिया गया, हटा दिया गया, या अपूर्ण सुविधा को हटाने के बाद किए गए अन्य परिवर्तनों को खो दिया। – Thomee

2

यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन भविष्य में आपको अपनी प्रत्येक उप-परियोजनाओं को शुरू करने के लिए एक अलग शाखा पर विकसित करना चाहिए। केवल जब उप-प्रोजेक्ट समाप्त हो जाता है और जहाज के लिए तैयार किया जाना चाहिए तो इसे ट्रंक में विलय किया जाना चाहिए। इस तरह, ट्रंक हमेशा एक शिप करने योग्य राज्य में होता है।

एकमात्र चुनौती यह है कि यदि दो अलग-अलग उप-परियोजनाओं को एक ही नए कोड को साझा करने की आवश्यकता है। सबवर्सन उस मामले को चुनौतीपूर्ण बनाता है, लेकिन गिट, मर्कुरियल और बाज़ार जैसे अन्य संशोधन नियंत्रण प्रणाली उस मामले को आसान बनाती हैं।

जहाँ तक अपने वास्तविक सवाल का जवाब देने के रूप में, निम्न URL बताते हैं कि कैसे एक विशिष्ट संशोधन संख्या पूर्ववत करने के लिए:

http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.basicmerging.undo

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

0

रिपो सेट अप करने के कई तरीके हैं, लेकिन जिस तरह से मैं आमतौर पर ऐसा करता हूं यह है।

trunk - always tracks the latest code in development that will definitely get released 
branches/R1 - when I do a release, I create a branch for it, and also a tag (see below R1.0). This branch always tracks the latest version of Release 1.x. If I need to go back, I use the tags, below. 
branches/Import Tool - when I am working on a standalone feature that may not get released with latest code (e.g., main product is a calendar, import tool may not be ready in time). 
tags/R1.0 
tags/R1.1 - every time I release an update to a release, I create a tag, so that I can easily revert to that version e.g., if I need to reproduce a bug 
tags/R1.2 

जब मैं नवीनतम कोड (ट्रंक) में एक बग, मैं इसे मौजूदा रिलीज शाखा में वापस विलय लगता है (जैसे, शाखाओं/आर 1) यदि आवश्यक हो तो।

आप बहुत सारी शाखाएं नहीं बनाना चाहते हैं, क्योंकि यह मुख्य ट्रंक से विलय करने में अधिक काम करेगा, इसलिए शाखाओं की संख्या जितनी छोटी हो सके रखें।

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