2009-08-03 12 views
18

मेरे पास 2 भंडार हैं। चूंकि ट्रंक कोड एक भंडार में था, जिसे संरक्षित किया गया था, मैंने चेकआउट किया और फिर अन्य भंडार में चेक किया (क्योंकि उपयोगकर्ताओं को पहले संरक्षित व्यक्ति की अनुमति नहीं थी)।2 अलग-अलग भंडारों में एसवीएन diff

अब मुद्दा यह है कि दोनों रिपॉजिटरीज पर काम किया गया है और हम अंततः दूसरे असुरक्षित व्यक्ति में संरक्षित व्यक्ति के साथ कोड/शाखा को विलय करना चाहते हैं। लेकिन, इन में संघर्ष होंगे।

क्या 2 रिपोजिटरी शाखाओं के लिए अंतर जानने का कोई तरीका है? इसके अलावा, अगर व्हाइटस्पेस परिवर्तन होते हैं, तो मैं उनको अनदेखा कैसे करूं?

उत्तर

23

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

diff -w -u -r -N WorkingCopy1 WorkingCopy2

-w अनदेखा करने के लिए फिर सब व्हाइटस्पेस -u एकीकृत diff प्रारूप (तोड़फोड़) की तरह उपयोग करने के लिए -r पुनरावर्ती -N के लिए नई फ़ाइलें पैच

यह निश्चित रूप से सबसे तेजी से दृष्टिकोण नहीं है में दिखाई देते हैं यह बताने के लिए है, लेकिन एक बार की प्रक्रिया के लिए स्वीकार्य हो सकता है । तुम भी आप Windows चला रहे हैं एक फ़ाइल diff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch

के उत्पादन पुनः निर्देशित द्वारा एक पैच बना सकते हैं, Win32 भिन्नता की बनाता है और पैच यहां पाया जा सकता: http://gnuwin32.sourceforge.net/packages/diffutils.htm

+0

मुझे यह विचार पसंद है। यदि अपेक्षित इन-फ़ाइल विवादों की मात्रा छोटी है तो आप दोनों दिशाओं में rsync -av --ignore = '। Svn' भी कर सकते हैं (पहले -n, सूखे रन ध्वज और फिर बिना) – bobah

+1

सुझाव दें - exclude = " .svn " ... या .git .hg ... आदि उदाहरण: diff -w -u -r -N --exclude =" svn "वर्किंगकॉपी 1 वर्किंग कॉपी 2 – ideasman42

+0

यदि आप वास्तव में पागल होना चाहते हैं: diff - w -u -r -N -x '* .pyc' --exlude = "। svn" वर्किंग कॉपी 1 वर्किंग कॉपी 2 | vim - –

3

आप दोनों रिपॉजिटरीज़ से चेक-आउट कार्यशील प्रतियों की तुलना करने के लिए केडीएफ 3 जैसे टूल का उपयोग कर सकते हैं। (बस इसे दो निर्देशिकाओं पर इंगित करें और यह उन सभी फ़ाइलों की पुनरावृत्ति की तुलना करेगा।)

1

शायद सबसे आसान बात दोनों शाखाओं की जांच करना और winmerge जैसे टूल का उपयोग करना है (जो आपको रिक्त स्थान को अनदेखा करने और करने की अनुमति देगा एक बहु तुलना)

+0

लाभ या kdiff3 पक्ष हैं साइड तुलना और इंटरैक्टिव ब्राउज़िंग (और अगर आपको आवश्यकता हो तो विलय भी हो)। – apollodude217

1

कॉपी कुछ पहले का उपयोग करते हुए दूसरा भंडार साथ पहले भंडार की एक काम की नकल में निम्नलिखित:

svn cp svn://url/to/the/second/repo branches/second_repo 

चेकइन और अपने ट्रंक के लिए नई शाखा से एक नियमित रूप से मर्ज करते हैं।

यह स्पष्टीकरण मानता है कि आप सबसे सामान्य svn भंडार लेआउट (शाखाओं/टैग///ट्रंक शीर्ष स्तर निर्देशिकाओं के रूप में) का उपयोग करते हैं और इसलिए कॉपी कमांड को अनुकूलित करना आवश्यक हो सकता है।

यह भी ध्यान दें कि एसवीएन के लिए कुछ जीयूआई इस प्रतिलिपि मोड का भी समर्थन करते हैं। SmartSVN में कमांड को "यूआरएल से कॉपी करें" कहा जाता है।

5

इस विलय को करने के लिए सबसे अच्छा टूल git-svn हो सकता है।दो खजाने का URL $ URL1 और $ url2 हैं, तो कोशिश:

 
$ git svn clone $URL1 svn1 
$ git svn clone $URL2 svn2 
$ cd svn1 
$ git fetch ../svn2 
$ git diff FETCH_HEAD master 

खाली स्थान के परिवर्तनों को अनदेखा करने के लिए, का उपयोग Git diff

1

निम्नलिखित काम करता है डब्ल्यू लेकिन यह धीमी गति से:

SVN diff [uRL] [url]

27
svn diff [email protected] [email protected] 

उदाहरण:

svn diff --old=http://svn.whatever.com/trunk/[email protected] --new=http://svn.whatever.com/branch/[email protected] 

यह आपको दोनों फाइलों के लिए शाखाओं और संशोधन संख्या दोनों निर्दिष्ट करने की अनुमति देता है। मुझे पता है कि यह काम करता है क्योंकि मैंने इसे अभी निष्पादित किया है।

+3

यह सही उत्तर है। –

+0

+1 सॉर्ट किया गया; चीयर्स, और बिना किसी अतिरिक्त आवश्यकता के कमांड लाइन से सभी। – Rob

+0

'svn प्राप्त हो रहा है: क्षमा करें, svn_client_diff4 को इस तरह से बुलाया गया था कि अभी तक कोई सहायता मास्टर समर्थित नहीं है? –

0

आप भी इस्तेमाल कर सकते हैं आप लिनक्स पर हैं, तो उपकरण "मिल जाएँगी" ... यह WinMerge तरह एक उपकरण का उपयोग करने के लिए महान diff बनाता है, और आप आसानी से किसी मर्ज कर सकते हैं ...

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