2009-02-25 17 views
30

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

जैसा कि another question में सुझाया गया है, मैं केवल ट्रंक को स्थानांतरित या हटा सकता हूं, और फिर शाखा को ट्रंक पर कॉपी कर सकता हूं। लेकिन फिर ट्रंक का इतिहास शाखा के इतिहास के साथ बदल दिया गया है। अगर मैं ट्रंक के इतिहास को बरकरार रखना चाहता हूं तो क्या होगा?

मुझे लगता है कि मैं जो चाहता हूं वह विलय की तरह कुछ है, लेकिन एक जहां गंतव्य के परिवर्तनों को अनदेखा किया जाता है, और बस स्रोत के साथ बदल दिया जाता है। सबवर्सन में मैं यह कैसे करूं? क्या यह अच्छा अभ्यास माना जाता है?

+0

पुरानी संशोधन ब्राउज़ करके आप अभी भी ट्रंक के इतिहास तक पहुंच सकते हैं ... –

+0

लेकिन किसी भी उपकरण जो फ़ाइल के इतिहास को देखता है (उदा। उपclipse) केवल शाखा पर संशोधन दिखाएगा। विलय/प्रतिलिपि के बाद, मैं ट्रंक पर एक नया संशोधन देखना पसंद करूंगा, जिसमें कॉपी/ऑपरेशन से सभी जोड़/परिवर्तन/हटाए गए हैं। –

+0

+1: मुझे यह भी करने की ज़रूरत है। @ जेडब्ल्यू क्या आपको यह काम करने के लिए मिला? –

उत्तर

4

मर्ज ट्रंक करने के लिए शाखा से सभी परिवर्तनों, और फिर

svn resolve path --accept theirs-full 

के साथ सभी विवादों को सुलझाने या आप ऐसा करने के लिए मर्ज बता सकते हैं,:,

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full 

इस तरह के एक मर्ज करने के बाद आपके पास एक कार्यशील प्रति है जो शाखा में एक जैसा दिखती है। आपको बस इतना करना है कि ट्रंक की कामकाजी प्रतिलिपि है।

+3

शाखा बिंदु के बाद से ट्रंक पर किए गए परिवर्तनों को संरक्षित नहीं करेगा (कम से कम जब यह विवादित नहीं है)? मुझे पूरा यकीन है कि इस तरह के मर्ज का नतीजा ट्रंक की तरह दिखने की गारंटी नहीं है, लेकिन आप विशेषज्ञ हैं ... – rmeador

+1

आप शाखा बनाने के बाद से सभी बदलावों को पूर्ववत करने के लिए ट्रंक पर रिवर्स विलय कर सकते हैं, फिर उस रिवर्स विलय को प्रतिबद्ध करें। उसके बाद, आप शाखा को ट्रंक में विलय कर सकते हैं। – Stefan

+0

'एसवीएन आरएम ट्रंक' के बाद 'एसवीएन कॉपी शाखा ट्रंक' (या एसवीएन हिल शाखा ट्रंक) के बाद क्या होता है? –

1

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

यदि आप ट्रंक का इतिहास रखना चाहते हैं, लेकिन शाखाकरण और विलय के बीच किए गए सभी परिवर्तनों पर बस स्टॉप करें, तो यह थोड़ा मुश्किल समस्या है। मुझे लगता है कि अगर आप एक विलय करते हैं जो पूर्वजों को अनदेखा करता है (वहां एक विकल्प --ignore-ancestry है), तो यह शाखा के साथ ट्रंक की सामग्री को प्रतिस्थापित करेगा। आप विलय के साथ --force विकल्प को भी आजमा सकते हैं (दोनों --ignore-ancestry के साथ और उसके साथ संयोजन में)। यह देखने के लिए कि आप जो परिणाम चाहते हैं उसे प्राप्त करने के लिए इसे दो अलग-अलग तरीकों से आज़माएं ...

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

+0

मैं आपके दो विकल्पों में से दूसरा चाहता हूं - ट्रंक में सभी परिवर्तनों पर stomp। –

4

प्री-1.5 यह आसान है: सुनिश्चित करें कि आपकी कार्यशील प्रतिलिपि ट्रंक को इंगित करती है, फिर "svn merl-of-trunk url-of-branch" विलय करें। आपके द्वारा प्राप्त किए गए परिवर्तन ट्रंक और शाखा के बीच डेल्टा हैं, प्रभावी ढंग से "मुझे हर चीज दें जो शाखा की तरह ट्रंक दिखने के लिए आवश्यक है।"

मुझे नहीं पता कि 1.5 की नई मर्ज क्षमताओं ने इस परिदृश्य को बदल दिया है या नहीं। ट्रंक इतिहास

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag" 

svn delete <repos/trunk> -m "deleted trunk temporarily" 

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features" 
इन चरणों का पालन करने

बरकरार रखा:

+1

शाखा को ट्रंक में विलय करने से वास्तव में ट्रंक के बजाय शाखा स्थिति की प्रतिलिपि बनाने के समान परिणाम नहीं मिल सकते हैं। प्री-1.5 संस्करणों में भी नहीं – JanM

32

हालांकि इसकी एक बहुत पुराने धागा, लेकिन अभी भी मेरे अनुभव साझा करने

हमने हाल ही में हमारी परियोजनाओं में से एक के लिए ऐसा किया और के रूप में दिशा निर्देशों का पालन और नई सुविधा शाखा को ट्रंक के रूप में बदलें।

+0

यदि आप वर्तमान ट्रंक के इतिहास को देखते हैं, तो आप नई शाखा के इतिहास को तब तक देखेंगे जब तक आप इसे कॉपी नहीं करते थे। पुराने ट्रंक के इतिहास को देखने के लिए, आपको इसे हटाए जाने से पहले संशोधन निर्दिष्ट करना होगा। –

+0

आप/टैग/old_trunk –

+0

में पुराने ट्रंक इतिहास देख सकते हैं मैं कछुआ का उपयोग करता हूं, लेकिन यह मेरी रणनीति होगी। –

0
trunk  remplace (trunk with your branch) 
*----x  * ----> 
\   | 
    \   | 
    *--------| 
    branch 

यह शाखा ट्रंक से बनाया गया था इसलिए सावधान रहना की बेरहमी से ट्रंक (वंश के साथ समस्याओं) को न हटाएं।

  1. क्लिक सही> टीम शाखा/टैग

    ग्रहण SVN का उपयोग करते हुए: सबसे पहले मैं इस तरह करते हैं सुझाव है कि अपने ट्रंक, अपने बैकअप, किसी भी मामले में के साथ एक टैग बनाने ...

    (एक टैग बनाएं - आपका बैकअप)

  2. टीम> एक और शाखा/टैग स्विच करें ... अपनी शाखा का चयन करें, सुनिश्चित करें कि शाखा सही ढंग से लोड हो गई है।

  3. शाखा में: टीम> डिस्कनेक्ट करें। एसवीएन जानकारी हटाएं।

  4. टीम> साझा करें परियोजना ... अपना ट्रंक चुनें।

  5. टीम> अपने ट्रंक में प्रतिबद्ध करें।

  6. दायाँ क्लिक करें ... चुनें >> शाखा/टैग -> अपनी शाखा की तलाश करें। अगर सब ठीक है तो आपके पास होगा: "चयनित इनपुट के बीच कोई अंतर नहीं है।"

मुझे उम्मीद है कि यह मदद करता है।