SVN चेकआउट अनदेखा फ़ोल्डर


98

मैं svn चेकआउट पर एक फ़ोल्डर की उपेक्षा कर सकते हैं? मुझे अपने बिल्ड सर्वर पर चेकआउट पर DOCs फ़ोल्डर को अनदेखा करने की आवश्यकता है।

संपादित करें: बाहरी लोगों की उपेक्षा एक विकल्प नहीं है। मेरे पास कुछ बाहरी चीजें हैं जिनकी मुझे आवश्यकता है।



जवाबों:


104

आप चेकआउट पर फ़ोल्डर्स को सीधे अनदेखा नहीं कर सकते, लेकिन आप svn 1.5 में स्पार्स चेकआउट का उपयोग कर सकते हैं। उदाहरण के लिए:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

यह आपके प्रोजेक्ट ट्रंक से 'my_checkout' में फ़ाइलों और निर्देशिकाओं की जाँच करेगा, लेकिन उन निर्देशिकाओं में पुनरावृत्ति नहीं करेगा। उदाहरण के लिए:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

फिर नीचे 'बार' की सामग्री प्राप्त करने के लिए:

$ cd bar && svn update --set-depth infinity

नोट: कुछ 1.5 संस्करणों में एक बग था जिसने इसे रोकाsvn: Shallowing of working copy depths is not yet supported
gcb

79

हां आप SVN 1.6 का उपयोग कर सकते हैं। आपको पहले एक चेकआउट करने की आवश्यकता होगी फिर बहिष्करण के लिए फ़ोल्डर को चिह्नित करें फिर अवांछित फ़ोल्डर को हटा दें।

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

अब से किसी भी अद्यतन के लिए काम करने वाली प्रतिलिपि डॉक्स फ़ोल्डर को फिर से नहीं देगी।

Http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ और http://subversion.apache.org/docs/release-notes/1.6.html www.nparse- देखें अधिक विवरण के लिए निर्देशिका-बहिष्करण

टॉम


2
Upvoted क्योंकि यह मुझे एक बहुत बड़ा फ़ोल्डर चेकआउट करने से बचाता है जो मेरे काम के लिए प्रासंगिक नहीं था।
dohpaz42

1
यह बहुत अच्छा है, svn सफाई के साथ मिलकर इसने मुझे 12 GiB बचाया।
जॉनीजेड

1
यह अभी भी सब कुछ शुरू में चेकआउट नहीं करता है?
हुआंगिज़्म

9

1.5 से पहले के संस्करणों के साथ मैंने पाया है कि यदि आप केवल सबसे शीर्ष फ़ोल्डर को चेकआउट करते हैं और फिर चुनिंदा अपडेट करते हैं, तो उसके बाद से अपडेट पर केवल वही प्रभाव पड़ता है जो आपने चेक आउट किया है। अर्थात।

svn co -N foo
cd foo
svn up -N bar
svn up

-N ध्वज ऑपरेशन को गैर-पुनरावर्ती बनाता है। ऊपर foo स्तर पर और कुछ नहीं की जाँच करेगा, जैसे। एक फ़ोल्डर है lala, अंतिम svn अप उस फ़ोल्डर की जाँच नहीं करेगा, लेकिन यह अद्यतन करेगा bar

लेकिन बाद में आप कर सकते हैं svn up lalaऔर इस प्रकार, इसे चेकआउट में जोड़ें।

संभवतः 1.5 के साथ भी यह काम करता है।


6

यह TortoiseSVN क्लाइंट 1.7.1 में है (कुछ पुराने संस्करणों में भी उपलब्ध हो सकता है):

  • SVN चेकआउट -> रिपॉजिटरी का URL चुनें

  • "चेकआउट आइटम" (चेकआउट गहराई के तहत) पर क्लिक करें और केवल आवश्यक फ़ोल्डर्स का चयन करें!


4

आप डॉक्स फ़ोल्डर को बाहरी रिपॉजिटरी में रख सकते हैं और फिर उपयोग कर सकते हैं svn checkout --ignore-externals


यह वही है जो हमने पिछली नौकरी में कुछ पूर्व-निर्मित घटकों को छोड़ने के लिए किया था।
मार्क बेस्सी

2
मुझे समझ नहीं आ रहा है कि external repositoryइसका क्या मतलब है। क्या आप इसे समझा सकते हैं?
विक्टर

4

हां, तोड़फोड़ 1.5 में स्पार्स चेकआउट नामक एक सुविधा है जो इस तरह का काम कर सकती है।


2
पढ़ने से, ऐसा लगता है कि विरल चेकआउट केवल एक चेकआउट की गहराई को सीमित करता है। वे एक विशेष फ़ोल्डर को अनदेखा नहीं कर सकते।
जॉन मिलिकिन

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

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

1.6+ संस्करण फ़ोल्डर्स को अनदेखा करने की अधिक क्षमता प्रदान करते हैं और काम की कॉपी में शामिल / बहिष्कृत करने के सामान्य तरीके को नियंत्रित करते हैं (जहाँ v1.5 इस में बहुत सीमित है) svnbook.red-bean.com/en/1.7/svn। advanced.sparsedirs.html
FruitBreak

3

मैंने यह प्रश्न पाया कि प्रतिगमन परीक्षणों को छोड़कर, WebKit स्रोतों की जाँच करने का तरीका खोज रहा था। मैं निम्नलिखित के साथ समाप्त हुआ:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

ध्यान दें कि आप बहिष्करण को बदल सकते हैं जैसा कि आप फिट देखते हैं, लेकिन * कार्यशील निर्देशिका (जो पहले से अद्यतित है) और सभी .svn निर्देशिकाओं को छोड़ने के लिए अनुशंसित है।


यह कौनसी भाषा है?
पप्प

ये यूनिक्स शेल कमांड हैं (इन्हें स्क्रिप्ट फ़ाइल के रूप में सहेजा और क्रियान्वित भी किया जा सकता है)
mrlem

2

मैंने हाल ही में उसी कार्य को हल किया है। यह विचार है कि रिपॉजिटरी के तहत फ़ोल्डर / फ़ाइलों की तत्काल सूची प्राप्त करने के लिए आपको आवश्यक प्रविष्टियों को बाहर करना है, फिर शेष फ़ोल्डरों की जांच करें और यदि कोई हो, तो तत्काल फाइलों को अपडेट करें। यहाँ समाधान है:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

स्रोत कार्यशील निर्देशिका में बदलें। आदेशों की प्रतिलिपि बनाएँ। पेस्ट करें। उपयुक्त URL बदलें और पैटर्न को बाहर करें। कमांड चलाएं।

धन्यवाद,


1
डेवलपर्स के लिए 6 साल क्या है? आपकी अंतिम पंक्ति में आपके पास $ ubrpath है। वह सेट कहां है?
डी-क्लॉटज़

1
@ D-Klotz, धन्यवाद, इसके बजाय $ rpath होना चाहिए, जो बदले में रिपॉजिटरी पथ पर सेट किया गया है। <br/> एक साल की देरी के लिए क्षमा करें
बी.वी.

1

नहीं, अनदेखी केवल फाइलों को जोड़ने के लिए है।
आप विरल चेकआउट का उपयोग कर सकते हैं (यदि आप svn 1.5 का उपयोग करते हैं)


1

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

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