Programing

SVN에서 파일의 모든 기록 변경 사항을 보는 방법

crosscheck 2020. 5. 28. 08:00
반응형

SVN에서 파일의 모든 기록 변경 사항을 보는 방법


svn diff -r a:b repo 지정된 두 개정 사이의 변경 사항을 볼 수 있다는 것을 알고 있습니다 . 내가 원하는 것은 파일을 변경 한 모든 개정에 대한 차이점입니다. 그러한 명령을 사용할 수 있습니까?


내장 명령이 없으므로 일반적으로 다음과 같은 작업을 수행합니다.

#!/bin/bash

# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs.  The first revision of the file is emitted as
# full text since there's not previous version to compare it to.

function history_of_file() {
    url=$1 # current url of file
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {

#       first revision as full text
        echo
        read r
        svn log -r$r $url@HEAD
        svn cat -r$r $url@HEAD
        echo

#       remaining revisions as differences to previous revision
        while read r
        do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
        done
    }
}

그런 다음 다음과 같이 호출 할 수 있습니다.

history_of_file $1

설명 한 것과 약간 다르지만 이것이 실제로 필요한 것일 수 있습니다.

svn blame filename

파일을 마지막으로 변경 한 커밋의 시간과 작성자가 각 행의 접두사로 파일을 인쇄합니다.


코드가 변경된 파일의 전체 히스토리를 보려면 다음을 수행하십시오.

svn log --diff [path_to_file] > log.txt

git-svn저장소를 Git 저장소로 가져 오는 데 사용할 수 있습니다 git log -p filename. 파일에 대한 각 로그 항목과 해당 diff가 표시됩니다.


로 시작

svn log -q file | grep '^r' | cut -f1 -d' '

그러면 파일이 변경된 수정본 목록이 표시되어에 대한 반복 호출을 스크립팅하는 데 사용할 수 있습니다 svn diff.


이상한 이름의 "blame"명령이이를 수행합니다. Tortoise를 사용하는 경우 "개정 본에서"대화 상자가 표시되고 그 다음에 개정 번호를 나타내는 행 단위 표시기와 함께 파일이 나열됩니다.

개정 정보를 마우스 오른쪽 버튼으로 클릭하면 체크인에 포함 된 다른 파일과 함께 전체 체크인 정보를 제공하는 "로그 표시"대화 상자가 나타납니다.


내가 아는 한 svn 명령이 내장되어 있지 않습니다. 모든 diff를 빌드하기 위해 여러 명령을 실행하려면 스크립트를 작성해야합니다. 옵션 인 경우 GUI svn 클라이언트를 사용하는 것이 더 간단한 방법입니다. 파괴적인 플러그인 Eclipse와 같은 많은 파일들은 파일 히스토리를 나열 할뿐만 아니라 각 개정판의 차이점을 볼 수있게합니다.


고마워, 벤딘 나는 당신의 솔루션을 매우 좋아합니다.

가장 최근의 변경 사항을 먼저 표시하여 역순으로 작동하도록 변경했습니다. 오래 지속되는 코드에서 중요한 것은 몇 년 동안 유지되었습니다. 나는 보통 그것을 더 많이 파이프합니다.

svnhistory elements.py |more

정렬에 -r을 추가했습니다. 사양을 제거했습니다. '첫 번째 레코드'처리. 차이점이 없으므로 마지막 항목에서 오류가 발생합니다. 나는 그렇게 멀리 떨어지지 않기 때문에 나는 그것과 함께 살고 있지만.

#!/bin/bash                                                                    

# history_of_file                                                              
#                                                                              
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802          
#   Outputs the full history of a given file as a sequence of                  
#   logentry/diff pairs.  The first revision of the file is emitted as         
#   full text since there's not previous version to compare it to.             
#                                                                              
# Dlink                                                                        
#   Made to work in reverse order                                              

function history_of_file() {
    url=$1 # current url of file                                               
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
        while read r
    do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
    done
    }
}

history_of_file $1

I've seen a bunch of partial answers while researching this topic. This is what worked for me and hope it helps others. This command will display output on the command line, showing the revision number, author, revision timestamp and changes made:

svn blame -v <filename>

To make your search easier, you can write the output to a file and grep for what you're looking for.

참고URL : https://stackoverflow.com/questions/282802/how-can-i-view-all-historical-changes-to-a-file-in-svn

반응형