2009-03-25 6 views
80

मैं निर्देशिका में सभी svn: externals (recursively) की सूची कैसे प्राप्त कर सकता हूं? क्या इसके लिए कोई उपयोगिता है?सभी svn सूचीबद्ध करें: बाहरी बार-बार?

(मैं Windows (और कछुआ) का उपयोग कर रहा) मैं की SVN एक समूह है: मेरी परियोजना के विभिन्न साझा भागों और मैं जब मैं शाखा यह आम तौर पर काफी त्रुटि सभी बाहरी खोजने के होने का खतरा है और को जोड़ने बाहरी उन्हें बदल दिया ताकि नई शाखा के भीतर पथ के लिंक।

+0

यह सवाल http://stackoverflow.com/questions/5118320/find-paths-with-svnexternal-properties-with-certain-string –

उत्तर

125

अपने काम की नकल की जड़ में निम्न कार्य करें:

svn propget svn:externals -R 

के रूप में नीचे टिप्पणी में चर्चा की, इस बाहरी में बाहरी सूची नहीं है।

TortoiseSVN उपयोगकर्ताओं के लिए नोट: TVoOSSNN इंस्टॉलर में SVN कमांड लाइन क्लाइंट को स्थापित करने के लिए एक विकल्प है। यह विकल्प डिफ़ॉल्ट रूप से सक्षम नहीं है।

+0

कि बस मुझे एक सूची प्रदान करती पर भी मौजूद है सभी बाहरी और जहां वे इंगित करते हैं .. लेकिन बाहरी का 'स्थान' नहीं .. यानी यदि मेरे पास [email protected] my_ex बाहरी के रूप में है, तो मुझे केवल my_ex http:/svnlinkhere – ShoeLace

+3

@ShoeLace: आपको होना चाहिए पुराने एसवीएन के साथ काम करना क्योंकि 1.6.1 में आउटपुट * में * यह जानकारी होती है। –

+0

अच्छा जवाब ... लेकिन मैं इसे TortoiseSVN के साथ विंडोज़ में कैसे कर सकता हूं? - मेरे पास मेरे कंप्यूटर पर 'svn.exe' नहीं है, लेकिन मेरे पास TortoiseSVN स्थापित है। – Eddified

15

मैन्युअल रूप से उन सभी बाहरी गुणों को बदलना कठिन लगता है। क्या आपने new functionality for externals को सबवर्जन 1.5 में जोड़ा है?

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

../

      निर्देशिका जिस पर SVN का URL के सापेक्ष: बाहरी संपत्ति सेट कर दिया जाता

^/

      भंडार की जड़ के सापेक्ष जिसमें svn: बाहरी गुणों का संस्करण

//

      जिस पर SVN निर्देशिका का URL की योजना के सापेक्ष: बाहरी संपत्ति सेट कर दिया जाता

/

      सर्वर के रूट यूआरएल के सापेक्ष जिस पर SVN: बाहरी संपत्ति का संस्करण

शायद उनमें से कोई मदद करेगा? मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप कैसे ब्रांचिंग कर रहे हैं और आपकी रिपोजिटरी संरचना कैसी दिखती है।

0

शायद, एक कामकाज के रूप में, आप अपनी परियोजना को इस तरह से बना सकते हैं कि सभी बाहरी एक ही फ़ोल्डर पर सेट हो जाएं, उदाहरण के लिए ट्रंक के नीचे प्रोजेक्ट फ़ोल्डर पर। (इसका मतलब यह नहीं है कि सभी बाहरी फ़ोल्डरों को वैसे ही गहराई से होना चाहिए।) फिर आप अपने प्रोजेक्ट फ़ोल्डर पर राइट-क्लिक कर सकते हैं, फिर गुण ..., फिर टैब सबवर्जन, फिर गुण ... फिर svn पर डबल-क्लिक करें: बाहरी।

0

मैं सभी संशोधन की एक सूची बनाने के लिए विम Coenen के जवाब का इस्तेमाल किया और लिखा निम्न स्क्रिप्ट: सौभाग्य से

getSvnRevs() { 
    cd "$1" 
    wcver="$(svnversion)" 
    [ -n "$wcver" ] || panic "Unable to get version for $wcdir" 
    echo "$1: $wcver" 
    svn propget svn:externals -R | while read a b c d e; do 
    [ -n "$a" ] || continue 
    if [ "$b" = "-" ]; then 
     wcparent="$a" 
     wcdir="$wcparent/$c" 
     [ -z "$e" ] || panic "Invalid format #1" 
    else 
     [ -n "$wcparent" ] || panic "Invalid format #2" 
     wcdir="$wcparent/$a" 
     [ -z "$c" ] || panic "Invalid format #3" 
    fi 
    [ -d "$wcdir" ] || panic "Invalid directory: $wcdir" 
    wcver="$(svnversion "$wcdir")" 
    [ -n "$wcver" ] || panic "Unable to get version for $wcdir" 
    echo "$1/$wcdir: $wcver" 
    done 
} 

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

अस्वीकरण: मुझे पता है कि मूल प्रश्न विंडोज़ के बारे में था, और जब तक आप साइगविन या इसी तरह का उपयोग नहीं कर रहे हैं तब तक शेल स्क्रिप्ट काम नहीं करेगी।

7

TortoiseSVN के लिए मेरे वैकल्पिक हल:

खोलें "शाखा/टैग ..." SVN संदर्भ मेनू से संवाद। निचला संवाद नेस्टेड बाहरी सहित सभी बाहरी दिखाता है।

+0

ऐसा लगता है जैसे TortoiseSVN पुन: रूप से svn के लिए नहीं दिखता है: svn: externals के भीतर बाहरी, इसलिए यह 'svn propget svn: externals -R' करने जैसा ही है। – paulie4

0

मैंने Daniel Alder's answer लिया, svnversion कॉल को हटा दिया, और इसे रिकर्सिव बनाया (नोट: read a b c d e स्रोत या गंतव्य में कोई स्थान होने पर काम नहीं करता है)। यह एक बैश स्क्रिप्ट है, इसलिए आपको या तो सिगविन की तरह कुछ चाहिए या Windows Subsystem for Linux का उपयोग करें।

getSvnExternals() { 
    svnbase="$1" 
    svnpath="$2" 
    svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read a b c d e; do 
    [ -n "$a" ] || continue 
    if [ "$b" = "-" ]; then 
     wcparent="$a" 
     external="$c" 
     wcdir=$(echo "$wcparent/$d" | sed s#^./##) 
     [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'" 
    else 
     [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent" 
     external="$a" 
     wcdir=$(echo "$wcparent/$b" | sed s#^./##) 
     [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'" 
    fi 
    echo "$1/$wcdir: $external" 
    ## recurse into external directory 
    [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir" 
    done 
}