ट्रंक में एक शाखा मिलाएं


125

मैं SVN के साथ एक अजीब समस्या का सामना कर रहा हूँ merge। मैं एक देव शाखा से ट्रंक में विलय करना चाहता हूं। हमारे पास एक ही समय में कई देव शाखाएं हैं जो ट्रंक को काटती हैं।

मैं इस आदेश के साथ ट्रंक करने के लिए उन शाखाओं में से एक का विलय कर रहा हूं:

svn merge trunk branch_1

मुझे ऐसे परिवर्तन दिखाई देते हैं जो इस शाखा का हिस्सा नहीं हैं, ट्रंक में विलय हो रहे हैं। मैं क्या गलत कर रहा हूं ?

एसवीएन संस्करण:

तोड़फोड़ कमांड लाइन ग्राहक, संस्करण 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32।


7
मुझे पता है कि यह कोई जवाब नहीं है, लेकिन यदि आपके पास एक साथ कई सक्रिय शाखाएं हैं, तो संभवत: आप बेहतर तरीके से मर्क्यूरियल या गिट में चले जाएंगे। Ps: मैं कट्टर नहीं हूं, मैं svn के साथ ~ 7 साल से काम कर रहा हूं ;-)
zerkms

2
क्या लाभ प्रदान करता है? Git या mercurial में जाना बेहतर विकल्प क्यों है?
वनचिन्तन चंद्रशेखरन

3
क्योंकि git और मर्क्यूरियल को शाखाओं का बेहतर समर्थन प्राप्त है। लाभ: आप इस तरह के सवाल नहीं पूछेंगे और शाखाओं को बनाने और बनाए रखने के लिए कम सिरदर्द होंगे (वर्तमान में मैं १००० शाखाओं के साथ एक परियोजना में काम कर रहा हूं, svn में उनके साथ काम करना एक नरक था)
zerkms

मैं Svnmerge.py को देखने और इस लेख की समीक्षा करने की सलाह देता हूं ।
chown

जवाबों:


215

आपका svn mergeवाक्यविन्यास गलत है।

आप इसकी एक कार्यशील प्रतिलिपि जांचना चाहते हैं trunkऔर फिर svn merge --reintegrateविकल्प का उपयोग करें :

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

देखें विलय पर SVN पुस्तक अध्याय अधिक जानकारी के लिए।


ध्यान दें कि जिस समय यह लिखा गया था, यह सही उत्तर था (और स्वीकार किया गया था), लेकिन चीजें आगे बढ़ गई हैं। Topek, और http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate का उत्तर देखें


4
- वैकल्पिक विकल्प अनिवार्य नहीं है, शाखा (1.6 में) को किसी भी समय किसी भी स्थान के साथ विलय किया जा सकता है
आलसी बेजर

1
वास्तव में? एक ही बदलाव को फिर से शुरू करने के बिना? क्या आप कृपया इसके साक्ष्य को पुष्टि के लिए लिंक प्रदान कर सकते हैं।
न्यूट्रिनो

--reintegrateवास्तव में अनिवार्य नहीं है लेकिन वास्तव में इस मामले में अनुशंसित है। मैंने इसे बिना करने की कोशिश की --reintegrateऔर सौ संघर्षों के साथ समाप्त किया। के साथ --reintegrate, कोई संघर्ष नहीं था और सब कुछ अच्छा था!
टिबो

17
--reintegrateविकल्प सरल और प्रभावी है, लेकिन यह ध्यान दिया जाना चाहिए कि "एक बार एक --reintegrateमर्ज ट्रंक करने के लिए शाखा से किया जाता है, शाखा नहीं रह गया है और आगे के काम के लिए प्रयोग करने योग्य है। सही ढंग से नई ट्रंक परिवर्तन अवशोषित करने के लिए यह नहीं सकता, और न ही इसे ठीक से reintegrated किया जा सकता है फिर से ट्रंक करने के लिए। " जैसा कि आपके द्वारा लिंक की गई पुस्तक द्वारा समझाया गया है।
पीनो

3
@daveL, ट्रंक से शाखा में आगे विलय मेरे लिए समझ में आता है। हालाँकि मुझे "एक पुनर्जीवित शाखा को जीवित रखने" के लिए एक उन्नत सुविधा मिली है (देखें stackoverflow.com/a/10163059/685806 ), इसके अलावा यह नए क्लाइंट संस्करणों द्वारा स्वचालित रूप से लागू होता है।
पीनो

78

यदि आपकी कार्य निर्देशिका ट्रंक को इंगित करती है, तो आपको अपनी शाखा को इसके साथ मिलाने में सक्षम होना चाहिए:

svn merge https://HOST/repository/branches/branch_1

अपने ट्रंक के रूट डायरेक्टरी में इस कमांड को जारी करना सुनिश्चित करें


7
एसवीएन 1.8 के रूप में। यह सही जवाब है। देखें subversion.apache.org/docs/release-notes/...
GreenAsJade

@blahdiblah कोड स्निपेट में बहुत अधिक बाहरी जानकारी होती है। वहाँ एक कारण है कि अध्ययन के अमूर्त को एक अध्ययन के किसी अन्य भाग की तुलना में अधिक परिमाण के पढ़ने के आदेश मिलते हैं। वही UX परीक्षण के लिए जाता है, उछाल दरों को कम करता है, आदि यह सभी एक ही सिद्धांत है।
अहानिबेकाड

1.7 के साथ - आप --regrgrate विकल्प के बिना विलय कर सकते हैं, और शाखा पर विकसित होते रहें और विलय करते रहें। अफसोस की बात है, 1.8 इसे एक पुनर्संयोजन के लिए मजबूर करेगा, और इसे रोकने के लिए कोई तरीका नहीं है। इसका मतलब यह है कि जैसे ही आप विलीन होते हैं, आप तब "खतरनाक जीवन" नृत्य के माध्यम से शाखा का उपयोग नहीं कर सकते
जॉन लिटिल

3
मर्ज के बाद ट्रंक की कार्य प्रतिलिपि को फिर से भंडार पर रखना न भूलें!
जॉन

16

ट्रंक में एक svn अपडेट करें, संशोधन संख्या पर ध्यान दें।

ट्रंक से:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

आप जाँच कर सकते हैं कि ब्रांच को svn लॉग करके ट्रंक से कहाँ काटा गया था

svn log --stop-on-copy

चूंकि कई देव शाखाएं हैं जो एक ही समय में जीवित हैं, इसलिए यह मेरे लिए भी काम नहीं कर रही थी, यह आदेश अन्य शाखाओं से भी बदलाव में खींच रहा था। हो सकता है कि यह SLik SVN क्लाइंट के साथ एक समस्या है?
फरवरी को वानचिनाथन चंद्रशेखरन

हालांकि यह गलत नहीं है, लेकिन svn(जैसे एक ओपी उपयोग कर रहा है) के अधिक हाल के संस्करणों के साथ विलय करने के लिए आसान तरीके हैं ।
१०:१२ पर blahdiblah

@VanchinathanChandrasekaran, कमांड में आप ब्रांच का नाम निर्दिष्ट करते हैं, क्योंकि svn://path/to/branch/branchNameउस ब्रांच से केवल अन्य ब्रांचों में ही बदलाव नहीं होना चाहिए। यदि ऐसा है तो हम खतरे में हैं!
फ्रेड्रिक गॉस

1

वाक्यविन्यास गलत है, यह इसके बजाय होना चाहिए

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.