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.

John
sumber
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_ .
phil_w
sumber
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.
bahrep
sumber
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.

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

Contango
sumber
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

Saya suka TRAC - plugin ini mungkin berguna untuk tugas Anda: http://trac-hacks.org/wiki/RepoSearchPlugin

Kai
sumber
ini terlihat agak menjanjikan ... tetapi tidak terlalu mudah untuk menginstal, tidak dapat mengkonfirmasi apakah itu berfungsi dengan Trac + VisualSVN Server.
Kit Roed
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

David d C e Freitas
sumber
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!

Ken
sumber
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).

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

Will Hartung
sumber
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.

Brendon-Van-Heyzen
sumber
2
Bagaimana dengan Krugle Basic?
Bard
1

Saya mulai menggunakan alat ini

http://www.supose.org/wiki/supose

Ini berfungsi dengan baik hanya kurang dari UI visual, tetapi cepat dan agak terawat

Kuryaki
sumber
1
Saat ini (Agustus 2012) proyek itu tampaknya macet ...
anol
Pada Desember 2012 mereka merilis sesuatu yang baru (0.7.1)
sendmoreinfo
2
tampaknya telah menghilang
fbstj
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.

jek
sumber