Temukan di File: Cari semua kode di Team Foundation Server


102

Apakah ada cara untuk mencari versi terbaru dari setiap file di TFS untuk string atau regex tertentu? Ini mungkin satu-satunya hal yang saya lewatkan dari Visual Source Safe ...

Saat ini saya melakukan Dapatkan Terbaru di seluruh basis kode dan menggunakan Pencarian Windows, tetapi ini menjadi cukup menyakitkan dengan lebih dari 1GB kode dalam 75.000 file.

EDIT : Mencoba powertools yang disebutkan, tetapi opsi "Pencarian Wildcard" muncul untuk hanya mencari nama file dan bukan isinya.

UPDATE : Kami telah menerapkan opsi pencarian yang disesuaikan di instalasi MOSS (Search Server) yang ada.

Jawaban:


57

Team Foundation Server 2015 (on-premises) dan Visual Studio Team Services (versi cloud) menyertakan dukungan bawaan untuk mencari di semua kode dan item pekerjaan Anda.

Anda dapat melakukan penelusuran string sederhana seperti foo, operasi boolean, foo OR baratau hal-hal khusus bahasa yang lebih kompleks seperticlass:WebRequest

tangkapan layar dari sintaks filter pencarian kode

Anda dapat membaca lebih lanjut di sini: https://www.visualstudio.com/en-us/docs/search/overview


2
Lihat jawaban saya di bawah, dan upvote;) Ini sekarang dimungkinkan pada TFS 2015 dengan menggunakan Code Searchplugin. marketplace.visualstudio.com/items?itemName=ms.vss-code-search
deadlydog

Pencarian kode saat ini tersedia hanya untuk Visual Studio Team Services. Dukungan untuk Team Foundation Server sedang dalam pengembangan, dan akan disertakan dalam rilis berikutnya.
paparush

Pencarian Kode sekarang tersedia di TFS 2017 atau yang lebih baru.
csrowell

Jika Anda mencoba untuk beralih ke versi 2015 dari dokumen itu: "Halaman yang diminta tidak tersedia untuk Team Foundation Server 2015."
AaronLS

16

Dalam kasus saya, menulis utilitas kecil di C # membantu. Tautan yang membantu saya - http://pascallaurin42.blogspot.com/2012/05/tfs-queries-searching-in-all-files-of.html

Bagaimana cara membuat daftar file proyek tim menggunakan api 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

Ada solusi alternatif lain, yang sepertinya lebih menarik.

  1. Siapkan server pencarian - bisa berupa mesin / server windows apa saja
  2. Siapkan layanan pemberitahuan TFS * (Berlangganan) untuk mendapatkan, menghapus, memperbarui file setiap kali check in terjadi. Jadi ini adalah layanan web yang bertindak seperti pendengar di server TFS, dan memperbarui / menyinkronkan file dan folder di server Pencarian. - ini secara dramatis akan meningkatkan akurasi (pencarian langsung), dan menghindari pemuatan satu kali membuat pengambilan berkala
  3. Siapkan layanan pengindeksan / pencarian terindeks windows di server Pencarian untuk folder root
  4. Tampilkan layanan web untuk mengembalikan hasil pencarian

Sekarang dengan semua pengaturan di atas, Anda memiliki beberapa opsi untuk klien:

  1. Siapkan halaman web untuk memanggil layanan pencarian dan format hasil untuk ditampilkan di halaman web - Anda juga dapat mengintegrasikan halaman web ini di dalam visual studio (melalui makro atau add-in)
  2. Buat antarmuka klien windows (winforms / wpf) untuk memanggil layanan pencarian dan memformat hasil dan menampilkannya di UI - Anda juga dapat mengintegrasikan alat klien ini di dalam studio visual melalui VSPackages atau add-in

Pembaruan : Saya melakukan rute ini, dan telah berfungsi dengan baik. Hanya ingin menambahkan ini.

Tautan referensi:

  1. Gunakan alat ini sebagai ganti bissubscribe.exe
  2. Menangani acara TFS
  3. Pemberitahuan Sistem Tim

12

Jika Anda menginstal TFS 2008 PowerTools, Anda akan mendapatkan tindakan "Temukan di Kontrol Sumber" di menu klik kanan Team Explorer.

Alat-alat Listrik TFS2008


4
@muerte lucu bahwa mereka disebut 'alat-alat listrik'. Beberapa orang akan mengatakan melakukan sesuatu seperti rollback adalah 'fungsionalitas dasar'. :-)
Iain Holder

nah, Anda pasti bisa melakukan rollback secara manual, hanya saja bukan operasi sekali klik. Mungkin seharusnya ..
Jeff Atwood

3
Jawaban bagus, tautan mati: microsoft.com/downloads/…
wcm

15
saya pikir hanya mencari nama file / folder
Kiddo

9
-1 alat listrik tidak mencari konten file , hanya nama file / folder.
Eugene Beresovsky

6

Kami telah menyiapkan solusi untuk Kontrol Sumber Server Team Foundation (bukan SourceSafe seperti yang Anda sebutkan) mirip dengan yang disarankan Grant; Dapatkan TF terjadwal, Search Server Express. Namun IFilter yang digunakan untuk file C # (teks) tidak memberikan hasil yang kami inginkan, jadi kami mengonversi file sumber ke file .htm. Kami sekarang dapat menambahkan meta-data tambahan ke file seperti:

  • Penulis (kami mendefinisikannya sebagai orang yang terakhir memeriksa file)
  • Pengodean warna (di daftar tugas kami)
  • Jumlah perubahan yang menunjukkan potensi masalah desain (pada daftar rencana kami)
  • Integrasikan dengan fitur VSTS IDE seperti Koders SmartSearch
  • dll.

Namun kami lebih memilih penangan protokol untuk Kontrol Sumber TFS, dan IFilter kode sumber khusus untuk solusi yang jauh lebih bertarget.


1
Adakah rencana untuk membuka sumber konversi .htm?
technomalogical

6

Baik,

  1. TFS2008 Power Tools tidak memiliki fungsi find-in-files. "Alat Temukan di Kontrol Sumber memberikan kemampuan untuk menemukan file dan folder di kontrol sumber berdasarkan status item atau dengan ekspresi karakter pengganti ."

  2. Ada program Windows dengan fungsi ini yang diposting di CodePlex . Saya baru saja menginstal dan menguji ini dan berfungsi dengan baik.


Ini bersisik dan lambat, tetapi tampaknya melakukan apa yang tertulis di kaleng
Paul Michaels

Saya mendapatkan kesalahan seperti yang didapat orang-orang ini di tautan di bawah ini. Ada lagi yang mengalami ini? tfssearchcode.codeplex.com/workitem/32475
strider

6

Ini sekarang dimungkinkan pada TFS 2015 dengan menggunakan Code Searchplugin. https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search

Pencarian dilakukan melalui antarmuka web, dan tidak mengharuskan Anda mengunduh kode ke mesin lokal Anda yang bagus.


Catatan: Pencarian kode saat ini hanya tersedia untuk Visual Studio Team Services. Dukungan untuk Team Foundation Server sedang dalam pengembangan, dan akan disertakan dalam rilis berikutnya.
Jamie

3

Solusi lain adalah dengan menggunakan "ctrl + shift + F". Anda dapat mengubah lokasi pencarian ke direktori lokal daripada solusi atau proyek. Ini hanya akan menggantikan pencarian desktop dan Anda masih harus mendapatkan kode terbaru, tetapi ini akan memungkinkan Anda untuk tetap berada dalam Visual Studio untuk melakukan pencarian Anda.


4
Tidak mengatasi masalah pencarian melalui versi kode TFS.
Craig

Bukan yang mereka inginkan.
Dave

Tidak berguna untuk mencari konten yang belum Anda unduh. Sebaiknya gunakan grep / findstr.
Jamie

2

Dengan asumsi Anda memiliki Notepad ++ , fitur yang sering terlewat adalah 'Temukan dalam file', yang sangat cepat dan dilengkapi dengan filter, ekspresi reguler, ganti, dan semua barang N ++.


1

Add-in ini mengklaim memiliki fungsi yang saya yakin Anda cari:

Sidekicks Yayasan Tim


Maaf saya tidak melihat di mana ia menawarkan untuk mencari di dalam file?
Mark Glorie

4
Pada akhirnya saya mengunduh set plug-in ini sebelumnya dan itu hanya memungkinkan Anda mencari berdasarkan penulis, label, tanggal dll. Tetapi tidak di dalam versi file yang lebih lama ...: \
Sandor Davidhazi

1

Pencarian untuk tautan file ini menjelaskan cara menemukan file. Saya memang harus mengotak-atik nasihat untuk membuatnya berhasil.

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

Dalam kasus perintah cd, saya melakukan perintah cd karena saya mencari file tf.exe. Lebih mudah untuk memulai dari ayat-ayat direktori itu dengan menambahkan seluruh path. Sekarang setelah saya memahami cara membuat ini berfungsi, saya akan menggunakan jalur absolut dalam tanda kutip.

Dalam kasus pencarian tf, saya mulai dari root server dengan $/dan saya mencari semua file yang diakhiri dengan sqlie *.sql. Jika Anda tidak ingin memulai dari root, gunakan "$/myproject/*.sql"saja.

Oh! Ini tidak menyelesaikan pencarian di bagian file dari pertanyaan tetapi pencarian Google saya membawa saya ke sini untuk menemukan file di antara tautan lainnya.


1

Saat ini tidak ada cara untuk melakukan ini di luar kotak, tetapi ada saran Suara Pengguna untuk menambahkannya: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2037649-implement-indexed- full-text-search-of-work-items

Meskipun saya ragu itu sesederhana membalik tombol, jika semua orang yang telah melihat pertanyaan ini memilihnya, MS mungkin akan menerapkan sesuatu.

Pembaruan: Cukup baca blog Brian Harry , yang menunjukkan permintaan ini ada di radar mereka, dan versi Online Visual Studio memiliki dukungan terbatas untuk mencari di mana git digunakan sebagai vcs: http://blogs.msdn.com/b/ visualstudioalm / archive / 2015/02/13 / annoing-limited-preview-for-visual-studio-online-code-search.aspx . Dari sini saya pikir adil untuk mengatakan itu hanya masalah waktu ...

Pembaruan 2: Sekarang ada ekstensi yang disediakan Microsoft, Pencarian Kode yang memungkinkan pencarian dalam kode serta item pekerjaan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.