2011-08-31 11 views
25

मैंने अपने सबवर्जन कॉन्फ़िगरेशन में मर्ज-टूल-cmd = meld निर्दिष्ट किया है।मिश्रित के साथ svn संघर्ष संकल्प कैसे सेट करें?

meld: error: too many arguments (wanted 0-4, got 5) 
The external merge tool exited with exit code 2 

किसी को भी समस्या का निदान कर सकते हैं/एक समाधान प्रदान: जब मैं प्रस्तुत संघर्ष समाधान विकल्पों में से विकल्प एल का उपयोग कर किसी मर्ज के विवाद को दूर करने के लिए जाना है, मैं संदेश प्राप्त होता है? धन्यवाद।

उत्तर

38

पहले एक चेतावनी वर्णन किया गया है! यदि आपको यह गलत लगता है तो अपने स्थानीय संपादन खोना बहुत आसान है! टेस्ट टेस्ट टेस्ट!

मुझे डर है कि pmod के लिंक से स्क्रिप्ट svn 1.6 (उबंटू 11.04 में वर्तमान) के साथ काम नहीं करती है। pmod's link और here और सलाह here से कोड एक साथ रखें, मैं इस स्क्रिप्ट ठीक काम करने के लिए लगता है कि बनाया:

#!/usr/bin/env python 
# svn merge-tool python wrapper for meld 
import sys 
import subprocess 

try: 
    # path to meld 
    meld = "/usr/bin/meld" 

    # file paths 
    base = sys.argv[1] 
    theirs = sys.argv[2] 
    mine = sys.argv[3] 
    merged = sys.argv[4] 

    # the call to meld 
    # For older meld versions: 
    # cmd = [meld, mine, base, theirs, merged] 
    # New meld versions: >= 1.8.4 
    cmd = [meld, mine, base, theirs, '-o', merged] 

    # Call meld, making sure it exits correctly 
    subprocess.check_call(cmd) 
except: 
    print "Oh noes, an error!" 
    sys.exit(-1) 

सहेजें इस कहीं समझदार (जैसे /usr/local/bin/svn-merge-meld.py) है और यह निष्पादन योग्य बनाने:

sudo chmod +x /usr/local/bin/svn-merge-meld.py 

तब संपादित ~/.subversion/config और लाइन merge-tool-cmd = को अनदेखा करें, और अपने आदेश के लिए पथ सेट करें।

ध्यान दें कि जब कोई संघर्ष होता है, तो आपको संकेत दिया जाएगा कि इसके साथ क्या किया जाए। इस स्क्रिप्ट को चलाने के लिए आपको एक 'एल' टाइप करना और svn के लिए टाइप करना होगा। जब आप अपना विलय पूरा कर लेंगे, तो आपको संघर्ष को हल करने के लिए 'आर' टाइप करना होगा और विलय संस्करण को कार्यशील प्रतिलिपि में कॉपी करना होगा।

+0

अद्यतन के लिए धन्यवाद। – Profpatsch

+0

ओएस और शिल आयात आयात करें - अब उनका उपयोग नहीं किया जाता है। – bcelary

+3

लगता है कि मेल्ड के लिए कॉल cmd बदल गया है - मैं 'cmd = [meld, mine, base, theirs, '-o', विलय] का उपयोग करता हूं '(मिला 1.8.4)। ' – Ayrat

2

आप (this जांच) हड़पने और चीजों को डाल करने के लिए तोड़फोड़ अपने diff उपकरण के लिए आवश्यक आदेश के लिए बाहर है आवरण स्क्रिप्ट का उपयोग करने की जरूरत है:

बाहरी दो और तीन तरह differencing उपकरण का उपयोग कर के लिए महत्वपूर्ण (जीएनयू diff और diff3 की तुलना में अन्य ) सबवर्सन के साथ रैपर स्क्रिप्ट का उपयोग करना है, जो सबवर्सन से इनपुट को उस चीज़ में परिवर्तित करें जो आपके differencing टूल को समझ सकता है, और फिर के आउटपुट को अपने टूल में वापस कनवर्ट करने के लिए प्रारूप जो सबवर्सन अपेक्षा करता है- प्रारूप जीएनयू उपकरण का उपयोग होगा घ। ...

सबवर्सन जीएनयू diff उपयोगिता के लिए उपयुक्त मानकों के साथ बाहरी diff कार्यक्रमों कहता है, और उम्मीद ही नहीं बाहरी कार्यक्रम होगा एक सफल त्रुटि कोड के साथ वापसी। अधिकांश वैकल्पिक diff प्रोग्रामों के लिए, केवल छठे और सातवें तर्क- फाइलों के पथ जो क्रमशः भिन्नता के बाएं और दाएं किनारे का प्रतिनिधित्व करते हैं- रुचि के हैं।

यह बहुत अच्छी तरह से here

9

drevicko's answer हाल के meld संस्करणों के लिए सही है। लेकिन पुराने meld संस्करण भी उपयोग किया जाता है:

  • वर्ष   मिलकर एक हो जाना-1.6।Ubuntu 13.04 (Raring) में 1 और Debian Wheezy (7.0) उबंटू 13.10 में
  • नई मिलकर एक हो जाना-1.8.2 (सजीव)   और डेबियन जेसी

bash स्क्रिप्ट नीचे svn-merge-meld.sh दोनों पुराने और हाल ही में meld संस्करणों का समर्थन करता (तीन चार तर्कों में से)।

#!/bin/bash 

base=${1?1st argument is 'base' file} 
theirs=${2?2nd argument is 'theirs' file} 
mine=${3?3rd argument is 'mine' file} 
merged=${4?4th argument is 'merged' file} 
version=$(meld --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/')  

if [[ "$version" < 1.7 ]] 
then 
    #old meld version 1.6.* = three input files 
    cat "$mine" > "$merged" 
    meld --label="Base=${base##*/}"   "$base" \ 
     --label="Mine->Merged=${merged##*/}" "$merged" \ 
     --label="Theirs=${theirs##*/}"  "$theirs" 
else 
    # recent meld versions 1.7.* and above = four input files 
    meld --label="Base=${base##*/}"   "$base" \ 
     --label="Mine=${mine##*/}"   "$mine" \ 
     --label="Merged=${merged##*/}"  "$merged" \ 
     --label="Theirs=${theirs##*/}"  "$theirs" 
fi 

chmod +x svn-merge-meld.sh को न भूलें। अंत में

git clone github.com/olibre/svn-useful-scripts.git 

, अपने कॉन्फ़िगरेशन अपडेट:

भी कर सकते हैं download svn-merge-meld.sh या यह कांटा

vi ~/.subversion/config 

और merge-tool-cmd सक्षम:

[helpers] 
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh 
+1

को गिट क्लोन का उपयोग करना पड़ा https://github.com/olibre/svn-useful -scripts.git – louisgab

+0

धन्यवाद @louisgab मैंने जवाब अपडेट किया है ;-) – olibre

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