Tìm kiếm tên tệp trong kho lưu trữ SVN


84

Chúng tôi có một kho lưu trữ số lượng lớn cho mã chứa hàng nghìn thư mục và thư mục con, tôi muốn tìm kiếm trong kho lưu trữ này với tên tệp hoặc bằng một số từ.

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt

Tôi muốn tìm kiếm cd.txt nhưng không biết nó ở đâu trong SVN Repository, vì vậy tôi muốn thực hiện tìm kiếm trên thư mục gốc của SVN, nơi tôi sẽ đặt tên tệp cd.txt và chạy lệnh, sẽ kiểm tra từng thư mục và sẽ hiển thị kết quả chi tiết tệp….

Hy vọng yêu cầu là rõ ràng. Bạn có thể vui lòng giúp tôi về điều này.


Tôi hy vọng có một lệnh phía máy khách mà bạn có thể nhập sẽ thực hiện phía máy chủ tìm kiếm. Repo SVN mà tôi đang làm việc này có thời gian phản hồi và tốc độ truyền qua VPN khủng khiếp. Than ôi, điều đó dường như không thể.
Patrick M

Câu trả lời:


60

Nếu tệp nằm trong bản sao làm việc của bạn, thì nếu bạn đang sử dụng svn 1.5:

svn list --depth infinity | grep <filename>

hoặc phiên bản svn cũ hơn:

find . -name <filename> -not -path '*.svn*'

Nếu bạn cần tìm tệp trong lịch sử (đã xóa hoặc di chuyển):

svn log -v | less

và tìm kiếm nó bằng:

\<filename><return>

3
svn danh sách --depth vô cực hoạt động tốt, trong cửa sổ tất nhiên bạn wont có grep theo mặc định, tôi chỉ đổ nó vào một tập tin văn bản và tìm kiếm thông qua đó với một trình soạn thảo văn bản:
Mandrake

4
Trong Windows PowerShell, bạn có thể sử dụng ... | select-string <filename>thay thế cho grep.
MarnixKlooster ReinstateMonica

2
Trong một dòng lệnh windows thông thường ... | find "<filename>"cũng sẽ hoạt động như một sự thay thế cho grep. LƯU Ý : Dấu "được yêu cầu xung quanh tên tệp.
Raystorm

7
Nếu tệp nằm trong bản sao làm việc của tôi, tôi không cần svn để tìm nó. Bạn nên thêm cách tìm kiếm repo như câu trả lời của Anton và Marios. Có lẽ điều đó là hiển nhiên đối với bạn nhưng chính câu trả lời của họ đã làm bật lên mối quan hệ đối với tôi già đơn giản.
Lieven Keersmaekers

1
Bạn có thể svn co --depth empty REPOURL RepoDir, cd RepoDirsvn list --depth infinitysau đó lấy tất cả các đường dẫn tệp từ máy chủ SVN (có thể tạo ra hàng triệu dòng nếu bạn có hàng triệu).
Ivan Akcheurov

58

Phần sau phù hợp với tôi (svn phiên bản 1.4.6)

svn list -R <URL> | grep "<file_pattern>"

6
Tuyệt quá. Điều này làm việc cho Rùa. Trong cửa sổ: svn myurl danh sách -R >> results.txt
live-tình yêu

Hoạt động thực sự tốt. Cũng dễ nhớ hơn nhiều chỉ là "-R" so với "--depth infinity".
MPV

chậm đối với các repo lớn, sau đó tốt hơn hãy sử dụng svn-crawller bên dưới.
karsten 27/09/18

17

Với quyền truy cập vào chính repo sử dụng (tức là trên hệ thống tệp máy chủ lưu trữ svn của bạn)

svnlook tree [path_to_repo] | grep [file_name]  

hoặc để tìm kiếm tất cả các kho (nếu bạn đã thiết lập nhiều kho).

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

tùy chọn --full-path sẽ cung cấp đường dẫn đầy đủ trong repo đến tệp (nếu tìm thấy)

thí dụ:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done

chuyển hướng đầu ra đến một tệp nếu cần bản sao tĩnh.
giả sử sử dụng hệ điều hành nix.


3
+1 để sử dụng "svnlook tree --full-path <path_to_repo> | grep <filename>". Đây là cách nhanh nhất mà tôi tìm thấy để thực hiện tìm kiếm tệp trong repo subversion.
Nick Grealy

tìm kiếm nhanh như chớp, rất hữu ích.
Dustin Cook

12

svn list --depth infinity <your-repo-here>để nhận danh sách các tệp trong repo và sau đó svn catđể lấy nội dung. Bạn có thể thêm --xmlphím vào listlệnh để phân tích cú pháp đơn giản hơn một chút.


Hãy nhớ sử dụng grepnếu bạn muốn xem 1 tệp, đặc biệt nếu bạn có hàng nghìn tệp trong kho lưu trữ như OP. Ngoài ra, có một --incrementalchế độ nếu bạn cần kết hợp đầu ra với đầu ra XML muộn hơn / sớm hơn.
chạy thận

6

Gần đây, tôi đã xuất bản tiện ích của mình để liệt kê kho lưu trữ, điều đó nhanh hơn nhiều so với cách tiếp cận "svn ls --depth infinity". Đây là điểm chuẩn . Nó chỉ gọi một hàm có sẵn trong API nội bộ Subversion, nhưng giờ đây có thể truy cập thông qua một dòng lệnh.

Vì vậy, bạn có thể chạy

$ svn-crawler <URL> | grep "<file_pattern>"

Công cụ tốt. Tôi đã thử nghiệm với CentOS7. Tôi đã phải thêm libsvn_delta và libsvn_subr vào danh sách target_link_libraries trong CMakeLists.txt, cũng điều chỉnh LIBAPR_LIBRARY_INCLUDE từ "include / apr-1.0" thành "include / apr-1".
karsten 27/09/18

4

Nếu bạn đang sử dụng TortoiseSVN, bạn có thể thử điều này NẾU bạn sẵn sàng xem từng Dự án - phù hợp với tôi:

  1. Tạo một dự án trống dưới URL cấp cao nhất của kho lưu trữ của bạn, gọi nó là BLANK
  2. Nhấp vào URL Repo ở khung bên trái
  3. Ở ngăn bên phải, chọn dự án BLANK của bạn và dự án mong muốn của bạn - nói thân cây
  4. Nhấp chuột phải để bật menu trình duyệt và chọn 'So sánh URL', tùy thuộc vào kích thước kho lưu trữ của bạn, có thể mất một phút để tải. Nhưng về cơ bản, bạn có được toàn bộ danh sách dự án của mình trong danh sách 'sẵn sàng tìm kiếm'.
  5. Nhập tên tệp của bạn hoặc chuỗi khác vào bộ lọc tìm kiếm


-2

Nếu kho lưu trữ từ xa của bạn không lớn, thì một phương pháp dễ dàng là: Bạn có thể thực hiện "kiểm tra" để có được một kho lưu trữ cục bộ. Nếu bạn đang ở trong máy windows, bạn sử dụng lệnh "Tìm kiếm" hoặc máy Linux sử dụng lệnh "Tìm".

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.