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.

Mark Glorie
sumber

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

Berikan Holliday
sumber
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;
    }
}
}
Vijayan dan Settin
sumber
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
Vin
sumber
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

markom
sumber
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.

GertGregers
sumber
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.

abatishchev
sumber
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.

anjing mematikan
sumber
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.

Todd
sumber
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 ++.

penyeringai
sumber
1

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

Sidekicks Yayasan Tim

Paul G
sumber
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.

Greg
sumber
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.

jmoreno
sumber