Tìm trong Tệp: Tìm kiếm tất cả mã trong Máy chủ Team Foundation


102

Có cách nào để tìm kiếm phiên bản mới nhất của mọi tệp trong TFS cho một chuỗi hoặc regex cụ thể không? Đây có lẽ là điều duy nhất tôi nhớ từ Visual Source Safe ...

Hiện tại, tôi thực hiện Tải mới nhất trên toàn bộ cơ sở mã và sử dụng Tìm kiếm Windows, nhưng điều này khá khó khăn với hơn 1GB mã trong 75.000 tệp.

CHỈNH SỬA : Đã thử các powertools được đề cập, nhưng tùy chọn "Tìm kiếm theo ký tự đại diện" xuất hiện để chỉ tìm kiếm tên tệp chứ không phải nội dung.

CẬP NHẬT : Chúng tôi đã triển khai tùy chọn tìm kiếm tùy chỉnh trong cài đặt MOSS (Máy chủ tìm kiếm) hiện có.

Câu trả lời:


57

Team Foundation Server 2015 (tại chỗ) và Visual Studio Team Services (phiên bản đám mây) bao gồm hỗ trợ tích hợp để tìm kiếm trên tất cả các mã và mục công việc của bạn.

Bạn có thể thực hiện các tìm kiếm chuỗi đơn giản như foo, các phép toán boolean như foo OR barhoặc những thứ phức tạp hơn theo ngôn ngữ cụ thể nhưclass:WebRequest

ảnh chụp màn hình cú pháp bộ lọc tìm kiếm mã

Bạn có thể đọc thêm về nó tại đây: https://www.visualstudio.com/en-us/docs/search/overview


2
Xem câu trả lời của tôi bên dưới và ủng hộ nó;) Điều này hiện có thể thực hiện được kể từ TFS 2015 bằng cách sử dụng Code Searchplugin. marketplace.visualstudio.com/items?itemName=ms.vss-code-search
deaddog

Tìm kiếm mã hiện chỉ có sẵn cho Dịch vụ nhóm Visual Studio. Hỗ trợ cho Máy chủ Team Foundation đang được phát triển và sẽ được đưa vào bản phát hành tiếp theo.
paparush

Tìm kiếm mã hiện đã có trong TFS 2017 hoặc mới hơn.
csrowell

Nếu bạn cố gắng chuyển sang phiên bản 2015 của tài liệu đó: "Trang được yêu cầu không khả dụng cho Team Foundation Server 2015."
AaronLS

16

Trong trường hợp của tôi, viết một tiện ích nhỏ trong C # đã giúp ích. Các liên kết đã giúp tôi - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Làm thế nào để liệt kê các tệp của một dự án nhóm bằng tfs api?

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

Có một giải pháp thay thế khác, có vẻ hấp dẫn hơn.

  1. Thiết lập máy chủ tìm kiếm - có thể là bất kỳ máy / máy chủ windows nào
  2. Thiết lập dịch vụ thông báo TFS * (Đăng ký Bissubscribe) để nhận, xóa, cập nhật tệp mỗi khi đăng ký. Vì vậy, đây là một dịch vụ web hoạt động giống như một bộ lắng nghe trên máy chủ TFS và cập nhật / đồng bộ hóa các tệp và thư mục trên máy chủ Tìm kiếm. - điều này sẽ cải thiện đáng kể độ chính xác (tìm kiếm trực tiếp) và tránh tải một lần khi thực hiện
  3. Thiết lập dịch vụ lập chỉ mục / tìm kiếm được lập chỉ mục cửa sổ trên Máy chủ tìm kiếm cho thư mục gốc
  4. Hiển thị một dịch vụ web để trả về kết quả tìm kiếm

Bây giờ với tất cả các thiết lập ở trên, bạn có một số tùy chọn cho khách hàng:

  1. Thiết lập trang web để gọi dịch vụ tìm kiếm và định dạng kết quả để hiển thị trên trang web - bạn cũng có thể tích hợp trang web này bên trong studio trực quan (thông qua macro hoặc bổ trợ)
  2. Tạo giao diện ứng dụng khách windows (winforms / wpf) để gọi dịch vụ tìm kiếm và định dạng kết quả và hiển thị chúng trên giao diện người dùng - bạn cũng có thể tích hợp công cụ khách này bên trong studio trực quan thông qua VSPackages hoặc phần bổ trợ

Cập nhật : Tôi đã đi tuyến đường này, và nó đã hoạt động tốt. Chỉ muốn thêm vào điều này.

Các liên kết tham khảo:

  1. Sử dụng công cụ này thay vì bissubscribe.exe
  2. Xử lý các sự kiện TFS
  3. Thông báo hệ thống nhóm

12

Nếu bạn cài đặt TFS 2008 PowerTools, bạn sẽ nhận được hành động "Tìm trong Kiểm soát Nguồn" trong trình đơn nhấp chuột phải của Team Explorer.

Công cụ điện TFS2008


4
@muerte thật buồn cười khi chúng được gọi là 'công cụ quyền lực'. Một số người sẽ nói rằng thực hiện một cái gì đó giống như khôi phục là 'chức năng cơ bản'. :-)
Iain Holder

tốt, bạn chắc chắn có thể thực hiện khôi phục theo cách thủ công, nó không chỉ là một thao tác một cú nhấp chuột. Có lẽ nó phải là ..
Jeff Atwood

3
Câu trả lời hay, liên kết chết: microsoft.com/downloads/…
wcm

15
tôi nghĩ rằng chỉ tìm kiếm tên tập tin / thư mục
Kiddo

9
-1 công cụ điện không tìm kiếm nội dung tệp , chỉ tìm kiếm tên tệp / thư mục.
Eugene Beresovsky

6

Chúng tôi đã thiết lập một giải pháp cho Kiểm soát nguồn máy chủ Team Foundation (không phải SourceSafe như bạn đề cập) tương tự như những gì Grant đề xuất; đã lên lịch TF Get, Search Server Express. Tuy nhiên IFilter được sử dụng cho các tệp C # (văn bản) không mang lại kết quả như chúng tôi mong muốn, vì vậy chúng tôi chuyển đổi tệp nguồn thành tệp .htm. Giờ đây, chúng tôi có thể thêm siêu dữ liệu bổ sung vào các tệp như:

  • Tác giả (chúng tôi xác định nó là người đã kiểm tra lần cuối trong tệp)
  • Mã hóa màu (trong danh sách việc cần làm của chúng tôi)
  • Số lượng thay đổi chỉ ra các vấn đề thiết kế tiềm ẩn (trong danh sách việc cần làm của chúng tôi)
  • Tích hợp với tính năng Tìm kiếm thông minh VSTS IDE như Koders
  • Vân vân.

Tuy nhiên, chúng tôi muốn một trình xử lý giao thức cho Điều khiển Nguồn TFS và một IFilter mã nguồn chuyên dụng cho một giải pháp được nhắm mục tiêu nhiều hơn.


1
Bất kỳ kế hoạch nào để mở mã nguồn chuyển đổi .htm?
technomalogical

6

Được chứ,

  1. TFS2008 Power Tools không có chức năng tìm trong tệp. "Các công cụ Tìm trong Kiểm soát Nguồn cung cấp khả năng định vị các tệp và thư mục trong kiểm soát nguồn theo trạng thái của mục hoặc bằng biểu thức ký tự đại diện ."

  2. Có một chương trình Windows với chức năng này được đăng trên CodePlex . Tôi vừa cài đặt và thử nghiệm cái này và nó hoạt động tốt.


Nó bong tróc và chậm chạp, nhưng dường như làm những gì nó nói trên hộp thiếc
Paul Michaels

Tôi gặp lỗi như những người này mắc phải trong liên kết bên dưới. Có ai khác trải qua điều này không?tfssearchcode.codeplex.com/workitem/32475
Strider

6

Điều này hiện có thể thực hiện được kể từ TFS 2015 bằng cách sử dụng Code Searchplugin. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

Việc tìm kiếm được thực hiện thông qua giao diện web và không yêu cầu bạn tải mã xuống máy cục bộ của bạn.


Lưu ý: Tìm kiếm Mã hiện chỉ khả dụng cho Dịch vụ Nhóm Visual Studio. Hỗ trợ cho Máy chủ Team Foundation đang được phát triển và sẽ được đưa vào bản phát hành tiếp theo.
Jamie

3

Một giải pháp khác là sử dụng "ctrl + shift + F". Bạn có thể thay đổi vị trí tìm kiếm thành một thư mục cục bộ thay vì một giải pháp hoặc dự án. Điều này sẽ chỉ thay thế cho tìm kiếm trên màn hình và bạn vẫn cần lấy mã mới nhất, nhưng nó sẽ cho phép bạn ở trong Visual Studio để thực hiện tìm kiếm của mình.


4
Không giải quyết vấn đề tìm kiếm thông qua các phiên bản mã TFS.
Craig

Không phải những gì họ muốn.
Dave

Vô ích khi tìm kiếm nội dung mà bạn chưa tải xuống. Cũng có thể sử dụng grep / findstr.
Jamie

2

Giả sử bạn có Notepad ++ , một tính năng thường bị bỏ qua là 'Tìm trong tệp', tính năng này cực kỳ nhanh và đi kèm với bộ lọc, biểu thức chính quy, thay thế và tất cả các tính năng N ++.


1

Phần bổ trợ này tuyên bố có chức năng mà tôi tin rằng bạn đang tìm kiếm:

Team Foundation Sidekicks


Xin lỗi, tôi không thấy nơi nó cung cấp để tìm kiếm các tệp bên trong?
Mark Glorie 17/10/08

4
Atually Tôi đã tải về plug-in này thiết lập trước đó và nó chỉ cho phép bạn tìm kiếm theo tác giả, nhãn, ngày vv nhưng phiên bản không phải bên trong cũ của tập tin ...: \
Sandor Davidhazi

1

Tìm kiếm liên kết tệp này giải thích cách tìm tệp. Tôi đã phải xoay quanh với những lời khuyên để làm cho nó hoạt động.

  1. cd "C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE"
  2. tf dir "$ / *. sql" / recursive / server: http: // mytfsserver: 8080 / tfs

Trong trường hợp của lệnh cd, tôi đã thực hiện lệnh cd vì tôi đang tìm tệp tf.exe. Sẽ dễ dàng hơn nếu chỉ bắt đầu từ các câu thư mục đó thêm toàn bộ đường dẫn. Bây giờ tôi đã hiểu cách làm cho nó hoạt động, tôi sẽ sử dụng đường dẫn tuyệt đối trong dấu ngoặc kép.

Trong trường hợp tìm kiếm tf, tôi đã bắt đầu từ thư mục gốc của máy chủ $/và tôi đã tìm kiếm tất cả các tệp kết thúc bằng sqlie *.sql. Nếu bạn không muốn bắt đầu từ gốc, hãy sử dụng "$/myproject/*.sql"thay thế.

Oh! Điều này không giải quyết được phần tìm kiếm trong tệp của câu hỏi nhưng tìm kiếm trên Google của tôi đã đưa tôi đến đây để tìm tệp trong số các liên kết khác.


1

Hiện tại không có cách nào để thực hiện việc này, nhưng có một đề xuất Giọng nói của người dùng để thêm nó: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed- full-text-search-of-work-items

Mặc dù tôi nghi ngờ rằng nó đơn giản như bật một công tắc, nhưng nếu tất cả mọi người đã xem câu hỏi này đều bỏ phiếu cho nó, MS có thể sẽ thực hiện một cái gì đó.

Cập nhật: Chỉ cần đọc blog của Brian Harry, blog này cho thấy yêu cầu này nằm trên radar của họ và phiên bản Trực tuyến của Visual Studio có hỗ trợ hạn chế cho việc tìm kiếm nơi git được sử dụng làm vcs: http://blogs.msdn.com/b/ visualstudioalm / archive / 2015/02/13 / messages-limited-preview-for-visual-studio-online-code-search.aspx . Từ điều này, tôi nghĩ công bằng mà nói đó chỉ là vấn đề thời gian ...

Cập nhật 2: Hiện đã có một tiện ích mở rộng do Microsoft cung cấp, Code Search cho phép tìm kiếm trong mã cũng như trong các mục công việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.