IT박스

Subversion History (전체 텍스트) 검색

itboxs 2020. 7. 2. 08:05
반응형

Subversion History (전체 텍스트) 검색


모든 히스토리를 포함하여 서브 버전 저장소의 전체 텍스트 검색을 수행하는 방법이 있습니까?

예를 들어, 어딘가에 사용한 기능을 작성했지만 필요하지 않았으므로 파일을 svn rm'd했지만 이제 다른 용도로 사용하려면 다시 찾아야합니다. svn 로그는 아마도 "제거 된 미사용 항목"과 같은 것을 말하고, 그런 체크인이 많이 있습니다.

편집 2016-04-15 : 여기에 "전체 텍스트 검색"이라는 용어가 요구하는 것은 파일 이름 및 / 또는 커밋 메시지가 아닌 커밋 기록의 실제 차이점검색하는 것 입니다. 필자는 위의 문구가 그 점을 잘 반영하지 않기 때문에 이것을 지적하고 있습니다. 그의 예제에서는 파일 이름 및 / 또는 커밋 메시지 만 찾을 수 있기 때문입니다. 따라서 많은 svn log답변과 의견.


git svn clone <svn url>
git log -G<some regex>

svn logApache Subversion 1.8 에서는 새로운 --search옵션을 지원 합니다 . 따라서 타사 도구 및 스크립트를 사용하지 않고도 Subversion 저장소 기록 로그 메시지를 검색 할 수 있습니다.

svn log --search 작성자, 날짜, 로그 메시지 텍스트 및 변경된 경로 목록에서 검색합니다.

참조 SVNBook | svn log명령 줄 참조 .


Windows를 실행하는 경우 SvnQuery를 살펴 보십시오 . 로컬 또는 원격 리포지토리의 전체 텍스트 인덱스를 유지 관리합니다. 저장소에 커밋 된 모든 문서는 색인화됩니다. 간단한 웹 인터페이스에서 Google과 유사한 쿼리를 수행 할 수 있습니다.


작은 쉘 스크립트를 사용하고 있지만 단일 파일에서만 작동합니다. 물론 더 많은 파일을 포함하기 위해 이것을 찾기와 결합 할 수 있습니다.

#!/bin/bash
for REV in `svn log $1 | grep ^r[0-9] | awk '{print $1}'`; do 
  svn cat $1 -r $REV | grep -q $2
  if [ $? -eq 0 ]; then 
    echo "$REV"
  fi 
done

정말로 모든 것을 검색하려면 svnadmin dump명령을 사용 하고 grep하십시오.


내가 찾은 가장 좋은 방법은 적은 것입니다.

svn log --verbose | 적게

출력이 적 으면 /VIM과 같이 검색 할 수 있습니다 .

편집하다:

저자에 따르면, 그는 메시지와 파일 이름 이상의 것을 검색하려고합니다. 어떤 경우에는 다음과 같이 빈민가를 해킹해야합니다.

svn diff -r0:HEAD | less

당신은 또한 당신을 대신 grep하여 다른 것을 대신 할 수도 있습니다. 이를 저장소의 서브 디렉토리에서 사용 svn log하려면 해당 디렉토리가 존재하는 첫 번째 개정판을 식별하고 대신 해당 개정판을 사용해야합니다 0.


나는 비슷한 것을 찾고있다. 내가 찾은 최고는 OpenGrok 입니다. 아직 구현하지 않았지만 유망한 것으로 들립니다.


svn log -v [repository] > somefile.log

diff의 경우 --diff옵션을 사용할 수 있습니다

svn log -v --diff [repository] > somefile.log

그런 다음 vim 또는 nano 또는 원하는 것을 사용하고 원하는 것을 검색하십시오. 꽤 빨리 찾을 수 있습니다.

멋진 스크립트 나 자동화 된 것이 아닙니다. 그러나 작동합니다.


무료는 아니지만 JIRA를 제공하는 사람들과 같은 Atlassian의 Fisheye를 살펴볼 수 있습니다. 다른 많은 유용한 기능으로 SVN에 대한 전체 텍스트 검색을 수행합니다.

http://www.atlassian.com/software/fisheye/


나는 똑같은 것을 찾고 이것을 발견했다.

http://svn-search.sourceforge.net/


나는이 문제에 부딪쳤다.

svnadmin dump <repo location> |grep -i <search term>

나를 위해 일을했다. 첫 번째 수정본을 반환하고 내가 찾던 줄을 ​​인용했습니다.


나는 그것에 대한 경험이 없지만 SupoSE (Java로 작성된 오픈 소스)는 정확히 이것을 수행하도록 설계된 도구입니다.


svn log -l<commit limit> | grep -C<5 or more lines> <search message>


이 문제를 해결하기 위해 이것을 cygwin bash 스크립트로 작성했습니다.

그러나 검색어가 현재 파일 시스템 파일 내에 있어야합니다. 파일 시스템 grep과 일치하는 모든 파일에 대해 해당 파일에 대한 모든 svn diff의 grep이 수행됩니다. 완벽하지는 않지만 대부분의 사용에는 충분해야합니다. 도움이 되었기를 바랍니다.

/ usr / local / bin / svngrep

#!/bin/bash
# Usage: svngrep $regex @grep_args

regex="$@"
pattern=`echo $regex | perl -p -e 's/--?\S+//g; s/^\\s+//;'` # strip --args
if [[ ! $regex ]]; then
    echo "Usage: svngrep \$regex @grep_args"
else 
    for file in `grep -irl --no-messages --exclude=\*.tmp --exclude=\.svn $regex ./`;     do 
        revs="`svnrevisions $file`";
        for rev in $revs; do
            diff=`svn diff $file -r$[rev-1]:$rev \
                 --diff-cmd /usr/bin/diff -x "-Ew -U5 --strip-trailing-cr" 2> /dev/null`
            context=`echo "$diff" \
                 | grep -i --color=none   -U5 "^\(+\|-\).*$pattern" \
                 | grep -i --color=always -U5             $pattern  \
                 | grep -v '^+++\|^---\|^===\|^Index: ' \
                 `
            if [[ $context ]]; then
                info=`echo "$diff" | grep '^+++\|^---'`
                log=`svn log $file -r$rev`
                #author=`svn info -r$rev | awk '/Last Changed Author:/ { print $4 }'`; 

                echo "========================================================================"
                echo "========================================================================"
                echo "$log"
                echo "$info"
                echo "$context"
                echo
            fi;
        done;
    done;
fi

/ usr / local / bin / svnrevisions

#!/bin/sh
# Usage:  svnrevisions $file
# Output: list of fully numeric svn revisions (without the r), one per line

file="$@"
    svn log "$file" 2> /dev/null | awk '/^r[[:digit:]]+ \|/ { sub(/^r/,"",$1); print  $1 }'

나는 일반적으로 Jack M의 말을 따르지만 (svn log --verbose 사용) 파이프 대신 grep 하기 위해 파이프합니다 .


특정 코드 줄을 담당하는 버전을 확인하려는 경우 다음을 찾고있을 것입니다.

svn blame

크레딧 : 원래 답변


bash 스크립트 를 발견했지만 시도하지 않았습니다.

참고 URL : https://stackoverflow.com/questions/44176/searching-subversion-history-full-text

반응형