2009-04-01 18 views
76

के लिए एसवीएन रिपॉजिटरी में खोजें हमारे पास कोड के लिए थोक भंडार है जिसमें हजारों फ़ोल्डर और उप फ़ोल्डर हैं, मैं इस रिपोजिटर के तहत फ़ाइल नाम या कुछ शब्द के साथ खोजना चाहता हूं।फ़ाइल नाम

Root folder 
    a\ 
    b\ 
    c\ 
    d\ 
    e\ 
    f\ab\ 
    f\ab\cd.txt 

मैं cd.txt लिए खोज करना चाहते हैं, लेकिन पता है, जहां यह SVN भंडार में है न, उस के लिए मैं SVN के रूट फ़ोल्डर पर एक खोज मैं कहाँ फ़ाइल नाम cd.txt डाल देंगे प्रदर्शन करने के लिए करना चाहते हैं और आदेश चलाएं, प्रत्येक फ़ोल्डर में जांच करेगा और फ़ाइल विवरण परिणाम प्रदर्शित करेगा ....

आशा की आवश्यकता स्पष्ट है। क्या आप कृपया इस पर मेरी मदद कर सकते हैं।

+0

[खोज उपversण इतिहास (पूर्ण पाठ) खोजना संभव डुप्लिकेट (http://stackoverflow.com/questions/44176/searching-subversion-history-full-text) – bahrep

+2

मुझे नहीं लगता कि यह एक डुप्लिकेट है। यह इतिहास खोजने के बारे में है। यह एक फाइल खोजने के बारे में है। –

+0

मैं उम्मीद कर रहा था कि क्लाइंट साइड कमांड था जिसे आप दर्ज कर सकते थे जो खोज सर्वर-पक्ष करेगा। मैं इस एसवीएन रेपो के साथ काम कर रहा हूं जिसमें वीपीएन पर भयानक प्रतिक्रिया समय और स्थानांतरण दर है। हां, यह संभव प्रतीत नहीं होता है। –

उत्तर

12

svn list --depth infinity <your-repo-here> रेपो में फ़ाइलों की सूची प्राप्त करने के लिए, और फिर svn cat सामग्री प्राप्त करने के लिए। पार्सिंग थोड़ा आसान बनाने के लिए आप --xml कुंजी list कमांड जोड़ सकते हैं।

+0

यदि आप 1 फ़ाइल देखना चाहते हैं, तो 'grep' का उपयोग करना याद रखें, खासकर अगर आपके पास ओपी जैसे रिपोजिटरी में हजारों फाइलें हैं। साथ ही, यदि आपको बाद में/पहले एक्सएमएल आउटपुट के साथ आउटपुट में शामिल होने की आवश्यकता है तो एक '--incremental' मोड है। – trysis

54

फ़ाइल अपने काम के पिछले भाग में है, तो आप SVN 1.5 उपयोग कर रहे हैं, तो:

svn list --depth infinity | grep <filename> 

या SVN के पिछले संस्करण:

find . -name <filename> -not -path '*.svn*' 

आप में फ़ाइल खोजने के लिए की जरूरत है इतिहास (हटाए गए या स्थानांतरित):

svn log -v | less 

और के साथ इसे खोजने:

\<filename><return> 
+3

एसवीएन सूची - डेपथ इन्फिनिटी अच्छी तरह से काम करती है, निश्चित रूप से विंडोज़ में आपके पास डिफ़ॉल्ट रूप से grep नहीं है, मैंने इसे एक टेक्स्ट फ़ाइल में फेंक दिया और टेक्स्ट एडिटर के साथ इसकी खोज की: – Mandrake

+4

विंडोज पावरशेल में आप '... | 'grep' के प्रतिस्थापन के रूप में चयन-स्ट्रिंग '। –

+2

एक नियमित विंडोज कमांड लाइन में '... | "" ढूंढें grep के प्रतिस्थापन के रूप में भी काम करेगा। ** नोट **: "फ़ाइल नाम के चारों ओर आवश्यक हैं। – Raystorm

52

मेरे लिए निम्नलिखित काम करता है (SVN संस्करण 1.4.6)

svn list -R <URL> | grep "<file_pattern>" 
+5

ग्रेट। यह कछुए के लिए काम करता है। विंडोज़ में: svn list -R myurl >> results.txt –

+0

वास्तव में अच्छी तरह से काम करता है। बस याद रखना बहुत आसान है "- आर "से" - डेपथ इन्फिनिटी "। – MPV

4

आप TortoiseSVN उपयोग कर रहे हैं तो आप इस कोशिश कर सकते हैं यदि आप परियोजना द्वारा परियोजना देखने के लिए तैयार हैं - मेरे लिए काम करता है:

  1. अपने भंडार शीर्ष स्तर यूआरएल के तहत एक खाली परियोजना बनाएँ, इसे कहते बाएँ फलक
  2. पर रेपो यूआरएल पर खाली
  3. क्लिक करें दाहिने हाथ पैन पर ई अपनी ब्लैंक परियोजना और अपनी वांछित परियोजना का चयन करें - ट्रंक
  4. ब्राउज़र मेनू को पॉप अप करने के लिए राइट क्लिक करें और अपने रेपो के आकार के आधार पर 'URL की तुलना करें' का चयन करें, इसमें लोड होने में एक मिनट लग सकता है। लेकिन आप मूल रूप से अपनी पूरी परियोजना सूची को 'तैयार-से-खोज' सूची में प्राप्त करते हैं।
  5. खोज फ़िल्टर
5

हाल ही में मैं प्रकाशित किया है में अपनी फ़ाइल नाम या अन्य स्ट्रिंग दर्ज करें मेरी utility भंडार सूची, उसके अलावा "SVN ls --depth अनंत" दृष्टिकोण ज्यादा तीव्र है। यहां benchmarks हैं। यह सिर्फ एक फ़ंक्शन को कॉल करता है जो सबवर्जन आंतरिक API में उपलब्ध है, लेकिन अब कमांड लाइन के माध्यम से सुलभ है।

तो तुम चला सकते हैं

$ svn-crawler <URL> | grep "<file_pattern>" 
15

svnlook tree [path_to_repo] | grep [file_name] 

या सभी रेपोस खोज करने के लिए (यदि आप एकाधिक रेपोस सेटअप रेपो के लिए उपयोग में ही (यानी अपने SVN मेजबान फ़ाइल sytem पर) का उपयोग के साथ)।

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

विकल्प --full-पथ रेपो में पूरा पथ फाइल करने के लिए दे देंगे (यदि पाया जाता है)

उदाहरण:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done 

एक फाइल करने के लिए पुन: निर्देशन उत्पादन करता है, तो स्थिर प्रति है जरूरत है।
निक्स ओएस का उपयोग कर मानता है।

+3

+1" svnlook tree --full-paths का उपयोग करने के लिए +1। grep "। यह सबवर्सन रेपो में फ़ाइल खोज करने का सबसे तेज़ तरीका है। –

+0

बिजली की तेज खोज, बहुत उपयोगी है। –

0

यदि आपका रिमोट रिपोजिटरी बड़ा नहीं है, तो एक आसान तरीका यह है: आप स्थानीय भंडार प्राप्त करने के लिए "चेकआउट" कर सकते हैं। यदि आप विंडोज मशीन में हैं तो आप "सर्च" या लिनक्स मशीन का उपयोग "ढूंढें" कमांड का उपयोग करते हैं।

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