2010-09-13 7 views
7

मुझे फ़ाइल नामों और संशोधन संख्याओं को खोजने के लिए एक सबवर्सन रिपॉजिटरी के सभी संशोधनों को खोजना होगा जिनमें एक विशेष स्ट्रिंग है। मुझे पता है कि यह डंप में घटनाएं पायेगा:मैं एक एसवीएन भंडार इतिहास कैसे ढूंढूं/खोज/grep कैसे करूं?

svnadmin dump $REPO_PATH | grep -i "Verdana" 

लेकिन आउटपुट बहुत गूढ़ है। आउटपुट में मेल खाने वाली बाइनरी फाइलों के भाग शामिल होंगे।

मैं एक परियोजना की वर्तमान कार्यशील प्रतिलिपि में तार के लिए खोज करने के लिए इस तरह कमांड का प्रयोग किया गया है:

find . -name "*.css" -print0 | xargs -0 grep "Verdana" 

उत्पादन का स्वरूप उपयोगी है, यह दोनों फ़ाइल नाम और लाइन दे जो स्ट्रिंग में आई: कि एक खोज स्ट्रिंग शामिल

./css/forms.css: font  : 12px Verdana; 

वहाँ कहते हैं के लिए एक SVN भंडार के सभी संशोधन खोज करने के लिए कोई तरीका है, सभी .css फ़ाइलें? और सिर्फ एक शब्द नहीं बल्कि वाइल्डकार्ड के साथ एक स्ट्रिंग या grep जैसे नियमित अभिव्यक्ति?

नोट: मेरे पास लिनक्स सर्वर पर उस पर भंडार के साथ रूट पहुंच है।

यह भी ध्यान दें: मैं एक कार्यशील प्रतिलिपि खोजना नहीं चाहता, मुझे सभी संशोधनों की खोज करने की आवश्यकता है।

+0

[grep से .svn निर्देशिका बहिष्कृत करें] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1491514/exclude-svn-directories-from-grep) –

+0

यह निश्चित रूप से .svn को बाहर करने का तरीका नहीं है। grep से निर्देशिका ... – quickshiftin

उत्तर

0

आप अपने रूट निर्देशिका पर

svn log --verbose 

की कोशिश की, प्रत्येक लॉग संदेश और सभी प्रभावित रास्तों मुद्रण है। यह आपको फ़ाइल सामग्री को पार्स नहीं करने देगा, लेकिन आप कम से कम .css फ़ाइलों को खोजने में सक्षम होंगे।

+0

हां, फ़ाइल नामों की खोज करने के लिए कई समाधान प्रतीत होते हैं। सामग्री trickier है। – Liam

+0

आप उस नवीनतम संस्करण और किसी भी पिछले संशोधन के बीच सादा पाठ आउटपुट उत्पन्न करने के लिए 'diff' का उपयोग कर सकते हैं। हो सकता है कि आप 'svn लॉग' के परिणामों के आधार पर 'diff' को कुछ फ़ाइलों तक सीमित भी कर सकें। – zellus

+0

http://stackoverflow.com/questions/1118051/how-do-i-search-all-revisions-of-a-file-in-a-subversion-repository इस प्रश्न का लगभग डुप्लिकेट है, लेकिन सभी संशोधनों की खोज करता है सिर्फ एक फाइल के लिए। http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=627008 एक दिलचस्प दृष्टिकोण प्रतीत होता है लेकिन बॉक्स से बाहर नहीं। – zellus

5

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

चूंकि संपूर्ण भंडार आपके स्थानीय सिस्टम पर है, इसलिए यह असीमित तेजी से खोज करता है!

मैं लगभग 30 डेवलपर्स के लिए एक बड़े उपवर्तन भंडार का प्रबंधन करता था, वे अक्सर मेरे डेस्क पर आते थे, "क्या आप यह परिवर्तन पा सकते हैं ..", आदि। मैं सिर्फ गिट को आग लगाना चाहता हूं!

svn log बहुत धीमा है क्योंकि इसे सर्वर को हिट करना है। साथ ही, यदि आपके पास सर्वर तक पहुंच है, तो आपको शायद | grep -v या सभी .svn निर्देशिकाओं को कम करने के समान ही होगा।

0

तर्ज पर विचार करें:

svn log $location -q | grep -P 'r\d+' -o | grep -P '\d+' -o | xargs -l1 svn diff -c | grep $pattern 

मैं या झंडे आप grep के लिए दे रहे हैं का समायोजन एक और अधिक जटिल पाइपलाइन (xargs उपयोग करने के बजाय एक पाश के लिए संभवतः पाइपिंग से) लिख कर लगता है कि आप SVN grep कर सकते हैं कुछ भी के लिए इतिहास।

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