Pencarian Repositori SVN [ditutup]


155

Apakah ada perangkat lunak bagus yang akan memungkinkan saya untuk mencari melalui repositori SVN saya untuk potongan kode? Saya menemukan 'FishEye' tetapi biayanya 1.200 dan jauh di luar anggaran saya.


6
Apakah Anda perlu mencari melalui sejarah repo? Atau hanya kepalanya?
swilliams

4
Ada versi gratis dari FishEye - www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas tidak ada pilihan gratis sekarang
bahrep

Ada FishEye versi $ 10: www.atlassian.com/software/starter/overview , @bahrep. Setelah libur, semua hasil untuk amal.
David d C e Freitas

1
Ada svn log --searchopsi baru , mungkin berguna untuk seseorang yang mencari pencarian riwayat repositori sederhana.
bahrep

Jawaban:


69

Jika Anda hanya mencari nama file, gunakan:

svn list -R file:///subversion/repository | grep filename

Windows:

svn list -R file:///subversion/repository | findstr filename

Jika tidak, lakukan checkout dan lakukan pencarian sistem file:

egrep -r _code_ .

3
Ini mungkin tidak sepenuhnya jelas, tetapi perintah ini berlaku untuk metode apa pun mengakses server svn, tidak hanya mengajukan: (misalnya svn: dan svn + ssh: juga berfungsi)
Alex Marshall

2
//, Maukah Anda memberikan contoh yang bekerja untuk masing-masing?
Nathan Basanese

1
OP ingin mencari melalui file, bukan hanya nama file. Contoh pencarian filesystem tidak terlalu berguna.
erict


12

Pembaruan Januari, 2020

VisualSVN Server 4.2 mendukung pencarian file dan folder di antarmuka web. Cobalah fitur baru di salah satu repositori server demo !

Lihat versi 4.2 Catatan Rilis , dan unduh VisualSVN Server 4.2.0 dari halaman unduhan utama .

masukkan deskripsi gambar di sini


Jawaban lama

Dimulai dengan Subversion 1.8, Anda dapat menggunakan --searchopsi dengan svn logperintah . Perhatikan bahwa perintah tidak melakukan pencarian teks lengkap di dalam repositori, hanya mempertimbangkan data berikut ini:

  • penulis revisi ( svn:authorproperti tidak berversi),
  • tanggal ( svn:dateproperti tidak berversi),
  • log pesan teks ( svn:logproperti tidak berversi),
  • daftar jalur yang diubah (yaitu jalur yang dipengaruhi oleh revisi tertentu).

Ini adalah halaman bantuan tentang opsi pencarian baru ini:

 If the --search option is used, log messages are displayed only if the
 provided search pattern matches any of the author, date, log message
 text (unless --quiet is used), or, if the --verbose option is also
 provided, a changed path.
 The search pattern may include "glob syntax" wildcards:
     ?      matches any single character
     *      matches a sequence of arbitrary characters
     [abc]  matches any of the characters listed inside the brackets
 If multiple --search options are provided, a log message is shown if
 it matches any of the provided search patterns. If the --search-and
 option is used, that option's argument is combined with the pattern
 from the previous --search or --search-and option, and a log message
 is shown only if it matches the combined search pattern.
 If --limit is used in combination with --search, --limit restricts the
 number of log messages searched, rather than restricting the output
 to a particular number of matching log messages.

1
Metode ini bekerja cepat, tetapi tidak boleh digunakan untuk mencari keberadaan file. Karena opsi pencarian ini hanya mem-parsing daftar jalur yang diubah secara eksplisit di setiap revisi, Anda dapat membuat salinan folder (cabang baru dibuat dari trunk) di mana file tertentu hadir, tetapi itu tidak akan terdaftar dengan metode ini.
Pieter-Jan Busschaert

@ Pieter-JanBusschaert komentar Anda adalah tentang menggunakan perintah svn log --search. Lihat jawaban yang diperbarui tentang pencarian berbasis webui baru. Tidak memiliki batasan ini.
bahrep


9
  1. Buat git-svnmirror dari repositori itu.
  2. Cari string yang ditambahkan atau dihapus di dalam git: git log -S'my line of code'atau sama digitk

Keuntungannya adalah Anda dapat melakukan banyak pencarian secara lokal, tanpa memuat server dan koneksi jaringan.


8

Contoh ini mengirimkan konten lengkap repositori ke file, yang kemudian Anda dapat dengan cepat mencari nama file di dalam editor:

svn list -R svn://svn > filelist.txt

Ini berguna jika repositori relatif statis dan Anda ingin melakukan pencarian cepat tanpa harus memuat semuanya berulang kali dari server SVN.


4
Saya harus mencatat bahwa dalam kasus saya, perlu digunakan httpsebagai protokol ( svn list -R http://repo/svn/etc).
Charles Wood

downvoted, karena OP ingin mencari melalui file, bukan nama file. Perintah daftar svn hanya membuang nama file repositori.
erict


4

Sebagai catatan, FishEye (dan banyak produk Atlassian lainnya) memiliki Starter Editions $ 10, yang dalam kasus FishEye memberi Anda 5 repositori dan akses hingga 10 commiter. Uang tersebut digunakan untuk amal dalam kasus ini.

www.atlassian.com/starter


Tidak lagi? Saya tidak melihat opsi gratis di halaman.
bahrep

@bahrep, saya sudah memperbarui jawabannya, sekarang $ 10 untuk amal yang secara efektif "gratis" jika Anda memikirkannya.
David d C e Freitas

3

Sangat lambat (dan diimplementasikan dengan kasar) tetapi kombinasi svn log dan svn cat berfungsi jika Anda mencari riwayat file tunggal atau repositori kecil:

svn log filetosearch |
    grep '^r' |
    cut -f1 -d' ' |
    xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'" 

akan menampilkan setiap nomor revisi tempat file diubah dan file. Anda selalu bisa memasukkan setiap revisi ke dalam file yang berbeda dan kemudian menerima perubahan.

PS. Peningkatan besar-besaran kepada siapa saja yang menunjukkan kepada saya bagaimana melakukan ini dengan benar!


3
Gunakan saja git-svn. Git memiliki pencarian kode bawaan di histori komit. Tetapi Anda harus mengunduh seluruh riwayat komit untuk digunakan git-svn.
Vi.

2

Jika Anda benar-benar putus asa, lakukan dump dari repo (lihat "svnadmin dump") dan kemudian menerimanya. Itu tidak cantik, tetapi Anda dapat melihat-lihat hasil pencarian untuk menemukan metadata yang menunjukkan file dan revisi, lalu memeriksanya untuk tampilan yang lebih baik.

Bukan solusi yang baik, pastinya, tetapi gratis :) SVN tidak menyediakan fitur untuk mencari checkin sebelumnya (atau bahkan file log sebelumnya, AFAIK).


1

Banyak repositori SVN "hanyalah" situs HTTP, jadi Anda dapat mempertimbangkan untuk mencari di beberapa rak aplikasi penelusuran "web crawling" yang dapat Anda arahkan pada root SVN dan itu akan memberi Anda fungsi dasar. Memutakhirkannya mungkin akan sedikit trik, mungkin beberapa pemeriksaan SVN dalam peretasan dapat menggelitik indeks untuk membuang atau mengindeks ulang perubahan saat Anda melakukannya.

Hanya berpikir keras.


1
Ini mungkin bukan ide yang baik, karena biaya overhead yang terlibat akan sangat besar. Juga, server SVN biasanya bukan halaman web biasa, tetapi repo svn diekspos melalui webdav.
torkildr

1

Ada krugle dan koders tetapi keduanya mahal. Keduanya memiliki plugin ide untuk gerhana.


2
Bagaimana dengan Krugle Basic?
Bard


0

// Edit: Alat sudah disebutkan dalam jawaban lain, jadi berikan semua kredit untuk Kuryaki.

Baru saja menemukan SupoSE yang merupakan alat baris perintah berbasis java yang memindai repositori untuk membuat indeks dan kemudian dapat menjawab jenis pertanyaan tertentu. Kami masih mengevaluasi alat tetapi terlihat menjanjikan. Perlu disebutkan bahwa itu membuat indeks penuh semua revisi termasuk file kode sumber dan format kantor umum.

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.