SVN 저장소에서 파일 이름 검색


84

수천 개의 폴더와 하위 폴더가 포함 된 코드에 대한 대량 저장소가 있습니다.이 저장소에서 파일 이름이나 단어로 검색하고 싶습니다.

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

cd.txt를 검색하고 싶지만 SVN Repository의 위치를 ​​모릅니다. SVN의 루트 폴더에서 검색을 수행하고 cd.txt 파일 이름을 입력하고 명령을 실행하고 체크인합니다. 각 폴더에 파일 세부 정보 결과가 표시됩니다 ....

희망 요건은 분명합니다. 제발 도와 주 시겠어요?


서버 측 검색을 수행하는 입력 할 수있는 클라이언트 측 명령이 있기를 바랐습니다. 이 SVN 저장소는 VPN을 통한 응답 시간과 전송 속도가 끔찍합니다. 아아, 그것은 불가능 해 보입니다.
Patrick M

답변:


60

파일이 작업 복사본에 있으면 svn 1.5를 사용하는 경우 :

svn list --depth infinity | grep <filename>

또는 이전 버전의 svn :

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

기록에서 파일을 찾아야하는 경우 (삭제 또는 이동) :

svn log -v | less

다음으로 검색하십시오.

\<filename><return>

3
svn list --depth infinity는 잘 작동합니다. 물론 Windows에서는 기본적으로 grep이 없습니다. 그냥 텍스트 파일에 덤프하고 텍스트 편집기로 검색했습니다.
Mandrake

4
Windows PowerShell을에서 당신은 사용할 수 있습니다 ... | select-string <filename>를 대체 grep.
MarnixKlooster ReinstateMonica

2
일반 Windows에서 명령 줄 ... | find "<filename>"은 grep의 대체물로도 작동합니다. 참고 : "는 파일 이름 주위에 필요합니다.
Raystorm

7
파일이 내 작업 복사본에 있으면 svn이 필요하지 않습니다. Anton 's 및 Marios 답변과 같은 저장소 검색 방법을 추가해야합니다. 아마도 그것은 당신에게 분명하지만 단순한 늙은 나를 위해 ligt를 켜는 것은 그들의 대답이었습니다.
Lieven Keersmaekers

1
당신은 할 수 있습니다 svn co --depth empty REPOURL RepoDir, cd RepoDir그리고 svn list --depth infinity다음 SVN 서버에서 모든 파일 경로가 (당신이 수백만이있는 경우 가능성이 수백만 라인의 생산) 얻을.
Ivan Akcheurov

58

다음은 나를 위해 작동합니다 (svn 버전 1.4.6)

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

6
큰. 이것은 Tortoise에서 작동합니다. 창에서 : svn의 목록 -R의 myURL이 >> RESULTS.TXT
라이브 - 사랑

정말 잘 작동합니다. 또한 "--depth infinity"보다 "-R"만 기억하는 것이 훨씬 쉽습니다.
MPV

큰 저장소의 경우 느리면 아래의 svn-crawler를 사용하는 것이 좋습니다.
karsten

17

repo 자체에 액세스하여 사용 (예 : svn 호스트 파일 시스템에서)

svnlook tree [path_to_repo] | grep [file_name]  

또는 모든 리포지토리를 검색합니다 (여러 리포지토리 설정이있는 경우).

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 

--full-paths 옵션은 파일에 대한 저장소의 전체 경로를 제공합니다 (있는 경우).

예:

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

정적 복사가 필요한 경우 출력을 파일로 리디렉션합니다.
nix OS를 사용한다고 가정합니다.


3
"svnlook tree --full-paths <path_to_repo> | grep <filename>"사용에 +1. 이것은 Subversion 저장소에서 파일 검색을 수행하는 가장 빠른 방법입니다.
Nick Grealy 2013 년

번개처럼 빠른 검색, 매우 유용합니다.
Dustin Cook

12

svn list --depth infinity <your-repo-here>저장소의 파일 목록을 가져온 다음 svn cat내용을 가져옵니다. 구문 분석을 좀 더 간단하게 만들기 --xml위해 list명령에 키를 추가 할 수 있습니다 .


grep특히 OP와 같은 저장소에 수천 개의 파일이있는 경우 1 개의 파일을 보려면 사용 하는 것을 잊지 마십시오 . 또한 --incremental출력을 이후 / 이전 XML 출력과 결합해야하는 경우 모드가 있습니다.
trysis

6

최근에 "svn ls --depth infinity"접근 방식보다 훨씬 빠른 저장소를 나열하는 유틸리티 를 게시했습니다 . 여기에 벤치 마크가 있습니다. Subversion 내부 API에서 사용할 수있는 함수 만 호출하지만 이제는 명령 줄을 통해 액세스 할 수 있습니다.

그래서 당신은 실행할 수 있습니다

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

좋은 도구입니다. CentOS7로 테스트했습니다. libsvn_delta 및 libsvn_subr을 CMakeLists.txt의 target_link_libraries 목록에 추가하고 LIBAPR_LIBRARY_INCLUDE를 "include / apr-1.0"에서 "include / apr-1"로 조정해야했습니다.
karsten

4

TortoiseSVN을 사용하는 경우 Project by Project를보고 싶다면 이것을 시도해 볼 수 있습니다.

  1. 저장소 최상위 URL 아래에 빈 프로젝트를 만들고 BLANK라고합니다.
  2. 왼쪽 창에서 Repo URL을 클릭하십시오.
  3. 오른쪽 창에서 BLANK 프로젝트와 원하는 프로젝트를 선택하십시오.
  4. 브라우저 메뉴를 팝업하려면 마우스 오른쪽 버튼을 클릭하고 'URL 비교'를 선택하십시오. 저장소 크기에 따라로드하는 데 1 분 정도 걸릴 수 있습니다. 그러나 기본적으로 전체 프로젝트 목록을 '검색 준비 완료'목록으로 가져옵니다.
  5. 검색 필터에 파일 이름 또는 기타 문자열을 입력하십시오.


-2

원격 저장소가 크지 않은 경우 쉬운 방법은 다음과 같습니다. "체크 아웃"을 수행하여 로컬 저장소를 가져올 수 있습니다. Windows 컴퓨터에있는 경우 "검색"을 사용하거나 Linux 컴퓨터에 "찾기"명령을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.