सभी svn की सूची दें: बाह्य पुनरावर्ती?


94

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

(मैं विंडोज का उपयोग कर रहा हूँ (और कछुआ))

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


जवाबों:


144

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

svn propget svn:externals -R

जैसा कि नीचे की टिप्पणियों में चर्चा की गई है, यह बाहरी लोगों में बाहरी सूची नहीं देता है।

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


बस मुझे सभी बाहरी लोगों की एक सूची देता है और जहां वे इंगित करते हैं .. लेकिन बाहरी का 'स्थान' नहीं है .. अर्थात यदि मेरे पास lib_ my_ex बाहरी के रूप में है तो मुझे केवल my_ex http: / svnlinkhere
शूकरल

4
@ShoeLace: यदि आप किसी पुराने SVN के साथ काम किया जाना चाहिए क्योंकि 1.6.1 में उत्पादन करता है इस जानकारी होती है।
विम कॉइनन

1
क्षमा करें, लेकिन मुझे इसे डाउन-वोट करना होगा क्योंकि a) यह सभी बाहरी आउटपुट नहीं देगा ; fx, अगर हमारे पास फ़ोल्डर के लिए बाहरी है और इस फ़ोल्डर के अंदर कहीं बाहरी है - तो यह दिखाई नहीं देगा b) प्रश्न को कछुआ svn टैग किया गया है, लेकिन उत्तर कमांड लाइन क्लाइंट से संबंधित है
pmod

2
@ शाम: ए) मुझे नहीं पता था, लेकिन यह मेरे लिए एक त्रुटि के बजाय एक एसवीएन बग की तरह लगता है। b) TortoiseSVN 1.7 इंस्टॉलर में कमांड लाइन क्लाइंट शामिल है!
विम कॉइनन

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

15

मैन्युअल रूप से उन सभी बाहरी गुणों को बदलना थकाऊ लगता है। क्या आपने तोड़फोड़ 1.5 में जोड़े गए बाह्य उपकरणों के लिए नई कार्यक्षमता को देखा है ?

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

../

    उस निर्देशिका के URL के सापेक्ष, जिस पर svn: externals property सेट है

^ /

    रिपॉजिटरी की जड़ से संबंधित है जिसमें svn: बाहरी संपत्ति का संस्करण है

//

    उस निर्देशिका के URL की योजना के सापेक्ष, जिस पर svn: externals गुण सेट है

/

    सर्वर के रूट URL से संबंधित, जिस पर svn: externals प्रॉपर्टी का संस्करण होता है

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


8

TortoiseSVN के लिए मेरा समाधान:

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


ऐसा लगता है कि TortoiseSVN svn के लिए पुनरावर्ती रूप से नहीं दिखता है: svn के भीतर बाह्य: बाह्य, इसलिए यह ऐसा ही कर रहा है svn propget svn:externals -R
पौली ४

0

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


0

मैंने Wim 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
}

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

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


0

मैंने डैनियल एल्डर का जवाब लिया , svnversion कॉल को हटा दिया, और इसे पुनरावर्ती बना दिया (नोट: read a b c d eयदि स्रोत या गंतव्य में कोई स्थान नहीं है तो काम नहीं करता है)। यह एक बैश स्क्रिप्ट है, इसलिए आपको या तो साइगविन जैसी किसी चीज़ की आवश्यकता होगी या लिनक्स के लिए विंडोज सबसिस्टम का उपयोग करना होगा ।

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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.