फ़ाइलों में खोजें: टीम फाउंडेशन सर्वर में सभी कोड खोजें


102

क्या टीएफएस में प्रत्येक फ़ाइल के नवीनतम संस्करण को एक विशिष्ट स्ट्रिंग या रेगेक्स के लिए खोज करने का एक तरीका है? विजुअल सोर्स सेफ से शायद यही एक चीज मुझे याद आती है ...

वर्तमान में मैं पूरे कोडबेस पर एक नवीनतम प्राप्त करता हूं और विंडोज सर्च का उपयोग करता हूं, लेकिन 75,000 फाइलों में 1 जीबी से अधिक कोड के साथ यह काफी दर्दनाक है।

संपादित करें : वर्णित पावरटूल की कोशिश की, लेकिन "वाइल्डकार्ड सर्च" विकल्प केवल खोज नाम और सामग्री नहीं खोजता है।

अद्यतन : हमने मौजूदा MOSS (सर्च सर्वर) इंस्टॉलेशन में एक अनुकूलित खोज विकल्प लागू किया है।

जवाबों:


57

टीम फाउंडेशन सर्वर 2015 (ऑन-प्रिमाइसेस) और विज़ुअल स्टूडियो टीम सर्विसेज (क्लाउड संस्करण) में आपके सभी कोड और कार्य आइटम खोजने के लिए अंतर्निहित समर्थन शामिल है।

आप सरल स्ट्रिंग खोज कर सकते हैं जैसे foo, बूलियन ऑपरेशन जैसे foo OR barया अधिक जटिल भाषा-विशिष्ट चीजेंclass:WebRequest

कोड खोज फ़िल्टर सिंटैक्स का स्क्रीनशॉट

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: https://www.visualstudio.com/en-us/docs/search/overview


2
नीचे मेरा जवाब देखें, और इसे बढ़ाएं;) यह अब Code Searchप्लगइन का उपयोग करके टीएफएस 2015 के रूप में संभव है । marketplace.visualstudio.com/items?itemName=ms.vss-code-search
घातक

कोड खोज वर्तमान में केवल Visual Studio टीम सेवाओं के लिए उपलब्ध है। टीम फाउंडेशन सर्वर के लिए समर्थन विकास के अधीन है, और अगली रिलीज में शामिल किया जाएगा।
पापरुश

कोड खोज अब TFS 2017 या नए में उपलब्ध है।
csrowell

यदि आप उस दस्तावेज़ के 2015 संस्करण पर स्विच करने का प्रयास करते हैं: "टीम फाउंडेशन सर्वर 2015 के लिए अनुरोधित पृष्ठ उपलब्ध नहीं है।"
एरोनल्स

16

मेरे मामले में, C # में एक छोटी सी उपयोगिता लिखने में मदद मिली। लिंक जिन्होंने मेरी मदद की - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Tfs एपीआई का उपयोग करके टीम प्रोजेक्ट की फ़ाइलों को कैसे सूचीबद्ध करें?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.Framework.Client;
using System.IO;

namespace TFSSearch
{
class Program
{
    static string[] textPatterns = new[] { "void main(", "exception", "RegisterScript" };  //Text to search
    static string[] filePatterns = new[] { "*.cs", "*.xml", "*.config", "*.asp", "*.aspx", "*.js", "*.htm", "*.html", 
                                           "*.vb", "*.asax", "*.ashx", "*.asmx", "*.ascx", "*.master", "*.svc"}; //file extensions

    static void Main(string[] args)
    {
        try
        {
            var tfs = TfsTeamProjectCollectionFactory
             .GetTeamProjectCollection(new Uri("http://{tfsserver}:8080/tfs/}")); // one some servers you also need to add collection path (if it not the default collection)

            tfs.EnsureAuthenticated();

            var versionControl = tfs.GetService<VersionControlServer>();


            StreamWriter outputFile = new StreamWriter(@"C:\Find.txt");
            var allProjs = versionControl.GetAllTeamProjects(true);
            foreach (var teamProj in allProjs)
            {
                foreach (var filePattern in filePatterns)
                {
                    var items = versionControl.GetItems(teamProj.ServerItem + "/" + filePattern, RecursionType.Full).Items
                                .Where(i => !i.ServerItem.Contains("_ReSharper"));  //skipping resharper stuff
                    foreach (var item in items)
                    {
                        List<string> lines = SearchInFile(item);
                        if (lines.Count > 0)
                        {
                            outputFile.WriteLine("FILE:" + item.ServerItem);
                            outputFile.WriteLine(lines.Count.ToString() + " occurence(s) found.");
                            outputFile.WriteLine();
                        }
                        foreach (string line in lines)
                        {
                            outputFile.WriteLine(line);
                        }
                        if (lines.Count > 0)
                        {
                            outputFile.WriteLine();
                        }
                    }
                }
                outputFile.Flush();
            }
        }
        catch (Exception e)
        {
            string ex = e.Message;
            Console.WriteLine("!!EXCEPTION: " + e.Message);
            Console.WriteLine("Continuing... ");
        }
        Console.WriteLine("========");
        Console.Read();
    }

    // Define other methods and classes here
    private static List<string> SearchInFile(Item file)
    {
        var result = new List<string>();

        try
        {
            var stream = new StreamReader(file.DownloadFile(), Encoding.Default);

            var line = stream.ReadLine();
            var lineIndex = 0;

            while (!stream.EndOfStream)
            {
                if (textPatterns.Any(p => line.IndexOf(p, StringComparison.OrdinalIgnoreCase) >= 0))
                    result.Add("=== Line " + lineIndex + ": " + line.Trim());

                line = stream.ReadLine();
                lineIndex++;
            }
        }
        catch (Exception e)
        {
            string ex = e.Message;
            Console.WriteLine("!!EXCEPTION: " + e.Message);
            Console.WriteLine("Continuing... ");
        }

        return result;
    }
}
}

13

एक और वैकल्पिक समाधान है, जो अधिक आकर्षक लगता है।

  1. एक खोज सर्वर सेटअप करें - कोई भी विंडोज़ मशीन / सर्वर हो सकता है
  2. एक चेकइन होता है, हर बार फ़ाइलों को प्राप्त करने, हटाने, अद्यतन करने के लिए एक टीएफएस अधिसूचना सेवा * (Bissubscribe) सेटअप करें। तो यह एक वेब सेवा है जो TFS सर्वर पर एक श्रोता की तरह काम करती है, और खोज सर्वर पर फ़ाइलों और फ़ोल्डरों को अपडेट / सिंक करती है। - यह नाटकीय रूप से सटीकता (लाइव खोज) में सुधार करेगा, और आवधिक हो जाता है बनाने के एक बार लोड से बचें
  3. रूट फ़ोल्डर के लिए खोज सर्वर पर एक अनुक्रमण सेवा / विंडोज़ अनुक्रमित खोज सेटअप करें
  4. खोज परिणामों को वापस करने के लिए एक वेब सेवा को बेनकाब करें

अब उपरोक्त सभी सेटअप के साथ, आपके पास क्लाइंट के लिए कुछ विकल्प हैं:

  1. खोज सेवा को कॉल करने और वेबपेज पर दिखाने के लिए परिणामों को प्रारूपित करने के लिए एक वेब पेज सेट करें - आप इस वेबपेज को विज़ुअल स्टूडियो (मैक्रो या ऐड-इन के माध्यम से) के अंदर भी एकीकृत कर सकते हैं।
  2. खोज सेवा को कॉल करने और परिणामों को प्रारूपित करने और उन्हें UI पर दिखाने के लिए एक विंडो क्लाइंट इंटरफ़ेस (winforms / wpf) बनाएं - आप VSPackages या ऐड-इन के माध्यम से विज़ुअल स्टूडियो के अंदर इस क्लाइंट टूल को भी एकीकृत कर सकते हैं

अद्यतन : मैं इस मार्ग पर गया था, और यह अच्छी तरह से काम कर रहा है। बस इससे जोड़ना चाहते थे।

संदर्भ लिंक:

  1. Bissubscribe.exe के बजाय इस टूल का उपयोग करें
  2. TFS घटनाओं को संभालना
  3. टीम सिस्टम सूचनाएं

12

यदि आप TFS 2008 PowerTools स्थापित करते हैं, तो आपको टीम एक्सप्लोरर राइट क्लिक मेनू में "सोर्स इन सोर्स कंट्रोल" कार्रवाई मिलेगी।

TFS2008 पावर टूल्स


4
@ मूरते यह मज़ेदार है कि उन्हें 'पॉवर टूल्स' कहा जाता है। कुछ कहेंगे कि रोलबैक जैसा कुछ करना 'बुनियादी कार्यक्षमता' है। :-)
इयान होल्डर

ठीक है, आप निश्चित रूप से मैन्युअल रूप से रोलबैक कर सकते हैं, यह केवल एक-क्लिक ऑपरेशन नहीं है। शायद यह होना चाहिए ..
जेफ एटवुड

3
अच्छा उत्तर, डेड लिंक: microsoft.com/downloads/…
wcm

15
मुझे लगता है कि केवल फ़ाइल / फ़ोल्डर नाम
किडो

9
-1 बिजली उपकरण फ़ाइल सामग्री , केवल फ़ाइल / फ़ोल्डर नाम नहीं खोजते हैं
यूजीन बेरेसोवस्की

6

हमने टीम फाउंडेशन सर्वर सोर्स कंट्रोल के लिए एक समाधान स्थापित किया है (जैसा कि आप उल्लेख करते हैं कि जैसा स्रोत नहीं है) ग्रांट सुझाव के समान है; अनुसूचित TF जाओ, खोज सर्वर एक्सप्रेस। हालाँकि, C # फ़ाइलों (पाठ) के लिए उपयोग किया गया IFilter हमारे इच्छित परिणाम नहीं दे रहा था, इसलिए हम स्रोत फ़ाइलों को .htm फ़ाइलों में परिवर्तित करते हैं। अब हम फाइल में अतिरिक्त मेटा-डेटा जोड़ सकते हैं जैसे:

  • लेखक (हम इसे उस व्यक्ति के रूप में परिभाषित करते हैं जिसने आखिरी बार फ़ाइल में जाँच की थी)
  • रंग कोडिंग (हमारे टूडू-सूची पर)
  • संभावित डिजाइन समस्याओं का संकेत देने वाले परिवर्तनों की संख्या (हमारी टूडू-सूची पर)
  • कोडर स्मार्टसर्च सुविधा जैसे VSTS IDE के साथ एकीकृत करें
  • आदि।

लेकिन हम टीएफएस स्रोत नियंत्रण के लिए एक प्रोटोकॉलहैंडलर और एक बहुत अधिक लक्षित समाधान के लिए एक समर्पित स्रोत कोड आईफिल्टर पसंद करेंगे।


1
स्रोत .htm रूपांतरण खोलने के लिए कोई योजना?
टेक्नोमलॉजिकल

6

ठीक है,

  1. TFS2008 विद्युत उपकरण है नहीं एक में ढूँढें फ़ाइलों समारोह है। "स्रोत नियंत्रण उपकरण में खोजें आइटम की स्थिति या वाइल्डकार्ड अभिव्यक्ति के साथ स्रोत नियंत्रण में फ़ाइलों और फ़ोल्डरों का पता लगाने की क्षमता प्रदान करते हैं ।"

  2. इस कार्यक्षमता के साथ एक विंडोज प्रोग्राम है जो कोडप्लेक्स पर पोस्ट किया गया है । मैंने अभी इसे स्थापित और परीक्षण किया है और यह अच्छी तरह से काम करता है।


यह परतदार और धीमा है, लेकिन ऐसा लगता है कि यह टिन पर क्या कहता है
पॉल माइकल्स

मुझे एक त्रुटि मिलती है जैसे इन लोगों को नीचे दिए गए लिंक में मिला। किसी और को यह अनुभव? tfssearchcode.codeplex.com/workitem/32475
strider

6

यह अब Code Searchप्लगइन का उपयोग करके टीएफएस 2015 के रूप में संभव है । https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

खोज वेब इंटरफ़ेस के माध्यम से की जाती है, और आपको अपने स्थानीय मशीन को कोड डाउनलोड करने की आवश्यकता नहीं होती है जो अच्छा है।


नोट: कोड खोज वर्तमान में केवल Visual Studio टीम सेवाओं के लिए उपलब्ध है। टीम फाउंडेशन सर्वर के लिए समर्थन विकास के अधीन है, और अगली रिलीज में शामिल किया जाएगा।
जॅमी

3

एक अन्य उपाय "ctrl + shift + F" का उपयोग करना है। आप समाधान या परियोजना के बजाय खोज स्थान को स्थानीय निर्देशिका में बदल सकते हैं। यह सिर्फ डेस्कटॉप खोज का स्थान लेगा और आपको अभी भी नवीनतम कोड प्राप्त करने की आवश्यकता होगी, लेकिन यह आपको अपनी खोज करने के लिए विजुअल स्टूडियो के भीतर रहने की अनुमति देगा।


4
टीएफएस कोड संस्करणों के माध्यम से खोज के मुद्दे को संबोधित नहीं करता है।
क्रेग

वो नहीं जो वो चाहते थे।
डेव

उन सामग्रियों को खोजने के लिए बेकार, जिन्हें आपने डाउनलोड नहीं किया है। साथ ही grep / findstr का उपयोग कर सकते हैं।
जेमी

2

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


1

इस ऐड-इन का दावा है कि मुझे लगता है कि कार्यक्षमता की कार्यक्षमता है:

टीम फाउंडेशन साइडकिक्स


क्षमा करें, मैं यह नहीं देखता कि यह फाइलों के अंदर खोजने का प्रस्ताव कहां है?
मार्क ग्लिटर

4
कम से कम मैंने इस प्लग-इन सेट को पहले ही डाउनलोड कर लिया था और यह आपको केवल लेखक, लेबल, दिनांक आदि के आधार पर खोज करने देता है, लेकिन फाइलों के पुराने संस्करणों के अंदर नहीं ...: \
_

1

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

  1. cd "C: \ Program Files (x86) \ Microsoft विज़ुअल स्टूडियो 12.0 \ Common7 \ IDE"
  2. tf dir "$ / *। sql" / पुनरावर्ती / सर्वर: http: // mytfsserver: 80% /

सीडी कमांड के मामले में, मैंने सीडी कमांड का प्रदर्शन किया क्योंकि मैं tf.exe फ़ाइल की तलाश कर रहा था। पूरे पथ को जोड़ने वाली उस निर्देशिका छंद से शुरू करना आसान था। अब जब मैं समझ गया कि इस काम को कैसे करना है, तो मैं उद्धरणों में निरपेक्ष पथ का उपयोग करूँगा।

Tf खोज के मामले में, मैंने सर्वर के मूल में शुरू किया $/और मैंने उन सभी फ़ाइलों को खोजा जो कि समाप्त sqlहुईं *.sql। यदि आप रूट पर शुरू नहीं करना चाहते हैं, तो उपयोग करें"$/myproject/*.sql" इसके बजाय ।

ओह! यह प्रश्न के फ़ाइल भाग में खोज को हल नहीं करता है, लेकिन मेरी Google खोज मुझे अन्य लिंक के बीच फ़ाइलों को खोजने के लिए यहां ले आई।


1

वर्तमान में इसे बॉक्स से बाहर करने का कोई तरीका नहीं है, लेकिन इसे जोड़ने के लिए एक उपयोगकर्ता की आवाज का सुझाव है: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed- पूर्ण-पाठ-खोज-की-काम-आइटम

हालांकि मुझे संदेह है कि स्विच को फ्लिप करना जितना आसान है, अगर सभी ने इस प्रश्न को देखा है तो इसके लिए वोट किया है, एमएस शायद कुछ को लागू करेगा।

अद्यतन: बस ब्रायन हैरी के ब्लॉग को पढ़ें , जो इस अनुरोध को उनके रडार पर होने के रूप में दिखाता है, और विज़ुअल स्टूडियो के ऑनलाइन संस्करण में खोज के लिए सीमित समर्थन है जहां जीआईटी का उपयोग vcs के रूप में किया जाता है: http://blogs.msdn.com/b/ Visualstudioalm / संग्रह / 2015/02/13 / घोषणा-सीमित-पूर्वावलोकन-के लिए-दृश्य-स्टूडियो-ऑनलाइन-कोड-search.aspx । इससे मुझे लगता है कि यह कहना उचित है कि यह समय की बात है ...

अद्यतन 2: अब एक Microsoft प्रदान किया गया एक्सटेंशन है, कोड खोज जो कोड के साथ-साथ कार्य आइटम में खोज करने में सक्षम बनाता है।

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