문제

모든 기록을 포함하여 Subversion 저장소의 전체 텍스트 검색을 수행할 수 있는 방법이 있습니까?

예를 들어, 어딘가에서 사용했던 기능을 작성했는데 필요하지 않아서 파일을 svn rm'했는데 이제 다른 용도로 사용하려면 다시 찾아야 합니다.svn 로그에는 "사용하지 않는 항목 제거"와 같은 내용이 표시될 수 있으며, 이와 같은 체크인이 많이 있습니다.

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

도움이 되었습니까?

해결책

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

다른 팁

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

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

보다 SVN북 | svn log 명령줄 참조.

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

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

#!/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 로그 -버 보스 | 더 적은

출력이 적어지면 다음을 칠 수 있습니다. / VIM처럼 검색하세요.

편집하다:

작성자에 따르면 그는 메시지와 파일 이름 이상의 검색을 원한다고 합니다.어떤 경우에는 다음과 같이 게토 해킹을 해야 합니다:

svn diff -r0:HEAD | less

대체할 수도 있습니다 grep 또는 당신을 검색할 다른 일이 있습니다.저장소의 하위 디렉터리에서 이를 사용하려면 다음을 사용해야 합니다. svn log 해당 디렉토리가 존재했던 첫 번째 개정판을 식별하고 대신 해당 개정판을 사용합니다. 0.

나는 비슷한 것을 찾고있었습니다.내가 생각 해낸 최고는 오픈그록.아직 구현해보지는 않았지만 유망해 보입니다.

svn log -v [repository] > somefile.log

차이점을 위해 다음을 사용할 수 있습니다. --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 }'

나는 보통 무엇을 합니까? 잭엠 (svn log --verbose 사용)이라고 말하지만 파이프로 연결합니다. grep 대신에 덜.

특정 코드 줄을 담당하는 개정판을 확인하려는 경우 아마도 다음을 찾고 있을 것입니다.

svn blame

신용 거래: 원래 답변

나는 이것을 발견했다 배시 스크립트, 그러나 나는 그것을 시도하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top