2011-01-05 16 views
5

जब मैं svn को अपने प्रोजेक्ट के लिए प्रतिबद्ध करने की कोशिश मैं निम्न समस्याक्या हटाए गए फाइलों को "अनदेखा" कर सकते हैं या उन्हें भंडार से हटा सकते हैं?

svn: '/var/www/sites/blabla/425/file.png' is scheduled for addition, but is missing 

यह इसलिए होता है क्योंकि कुछ सामग्री परियोजना से हटा दिया जाता है (और मैं SVN उपयोग नहीं कर सकते इसे हटाने के लिए) मिलता है। क्या ऐसी फाइलों को अनदेखा करने के लिए svn कहने का कोई तरीका है, या अगर उन्हें नहीं मिला तो उन्हें हटाने के लिए कोई तरीका है?

उत्तर

7

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

!  425/file.png 

आप एक स्क्रिप्ट लिखना चाहिए (पसंद का लाइन खोल) जो इस आउटपुट को पार करता है, विस्मयादिबोधक चिह्न से शुरू होने वाली लाइनों को देखता है, फ़ाइल नाम निकालता है, और फिर svn revert <filename> करता है। इसके बाद आप उस फ़ाइल में स्थानीय परिवर्तन को पूर्ववत कर देंगे, जिससे आप बिना किसी समस्या के प्रतिबद्ध हो सकते हैं।

संपादित करें: चूंकि आपने टिप्पणी में एक PHP स्क्रिप्ट का उल्लेख किया है, मुझे लगता है कि आप PHP स्क्रिप्टिंग से परिचित हैं। उस स्थिति में आप PHP फ़ंक्शन svn_status का उपयोग कर सकते हैं।

संपादित 2: यदि आप रिपॉजिटरी से फ़ाइल को हटाना चाहते हैं, तो इसके बजाय svn rm --force <filename> करें।

+0

टिप के लिए धन्यवाद। मैं वास्तव में सभी नई फाइलों को जोड़ने के लिए एक समान स्क्रिप्ट का उपयोग कर रहा हूं: ** svn status | grep^\? | अजीब '{प्रिंट $ 2}' | xargs svn जोड़ें **। क्या आपको लगता है कि मैं सिर्फ "?" को बदल सकता हूं साथ में "!" और "--force हटाएं" के साथ "जोड़ें"? – aneuryzm

+0

मैंने वास्तव में कोशिश की है और यह काम नहीं करता है। क्षमा करें, मैं उल्लेख करना भूल गया था कि मैं फ़ाइल को वापस नहीं करना चाहता, लेकिन इसे भंडार से हटा दें। – aneuryzm

+0

बस @ पैट्रिक की "svn add" टिप्पणी – ATorras

5

तो आप svn add फ़ाइल लेकिन बाद में इसे मैन्युअल रूप से हटा दिया गया? प्रयत्न;

svn rm --force file.png 

एसवीएन इंडेक्स से इसे हटाने के लिए।

+0

@ इस्माइल 'कार्टमैन 'डोंमेज़ फ़ाइल को एक php स्क्रिप्ट द्वारा हटा दिया गया है। तो मुझे पता नहीं है कि कौन सी फाइलें "svn rm" से हटती हैं (मुझे आपके आदेश में फ़ाइल नाम पता नहीं है)। मुझे काम करने वाली प्रतिलिपि में नहीं मिली फ़ाइलों को स्वचालित रूप से हटाने की आवश्यकता है)। – aneuryzm

+0

कोई स्वचालित तरीका नहीं है, आपको उन हटाए गए पथ मैन्युअल रूप से ढूंढने और उन पर 'svn rm --force' चलाने की आवश्यकता है। – ismail

+0

जिस व्यवहार के लिए आप पूछ रहे हैं वह "खतरनाक" है। यदि आप गलती से अपने कार्यक्षेत्र से एक फ़ाइल हटाते हैं - यह एक काफी विनाशकारी प्रतिक्रिया है। – jaydel

2

भागो टर्मिनल से निम्न आदेश:

मेरे लिए
svn revert $(svn st | awk 'BEGIN{FS=""} $1=="!" && $2 !~ /\.(sql|log|tmpl)$/ {print $2}') 
1

काम करता है:

svn status | grep ^\! | awk '{print $2}' | xargs -L1 svn del --force 

और यदि आप अपने फ़ाइल नामों में व्हाइटस्पेस है, हम awk उपयोग नहीं कर सकते तो हम के प्रारंभ होने तक कटौती फ़ाइल नाम (आपको शायद इसे संपादित करना होगा: क्योंकि idk अगर हमें प्रत्येक सिस्टम पर 9 अक्षरों को काटना चाहिए):

svn status | grep ^\! | cut -c9- | sed 's/ /\\ /g'| xargs -L1 svn del --force 
+1

की बजाय "svn rm" का उपयोग करें, जबकि यह कोड/स्निपेट प्रश्न का उत्तर दे सकता है, इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करने से उत्तर के दीर्घकालिक मूल्य में सुधार होगा । – Akkusativobjekt

+0

यहां जानने के लिए एकमात्र चाल है xxs के लिए -L1 विकल्प का उपयोग निष्पादन को एक पंक्ति के बाद एक पंक्ति को सीमित करने के लिए करना है। यदि आप नहीं करते हैं, तो आप वर्णों के आकार को ओवरफ़्लो कर सकते हैं xargs संभाल सकते हैं –

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

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