SVN : 주어진 경로에 대한 개정 번호 목록을 얻을 수 있습니까?
-
06-07-2019 - |
문제
저장소에 연결하고 커밋 목록을 다운로드하여 로컬로 저장하는 PHP 도구를 만들고 있습니다. 그러나 특정 리포지토리가 크고 긴 대기 시간과 가능한 시간 초과/오류로 로그 결과를 잡을 가능성으로 인해 Async 요청을 사용하여 각 커밋 메시지를 다운로드하고 싶습니다.
따라서 개정 기록의 시작 및 종말점이 있으며 다음과 같은 모든 로그를 가져올 수 있습니다.
svn log -r <from_revision>:<to_revision> <REPO_URL>
... 그리고 나는 XML 파일로 끝날 것입니다. 너무 커서 다운로드하는 데 오랜 시간이 걸리고 오랜 시간과 많은 리소스를 구문 분석하고 저장하는 데 오랜 시간이 걸릴 것입니다.
시작과 종말점을 알고 있다면 () 루프를 만들어 수정을 하나씩 가져올 수 있습니다.
svn log -r <revision> ...
그러나 주어진 경로에 대해 어떤 특정 개정이 존재하는지 모르기 때문에 오류가 발생합니다. 업데이트 중에 해당 오류를 무시하기 위해 응용 프로그램을 만들 수 있지만 불쾌한 해킹이며 요청을 게시하고 어쨌든 응답을 기다립니다. 전혀 좋지 않습니다.
그래서 나는 다음과 같은 것이 필요합니다.
- "이 경로의 개정 번호 목록을주세요"또는 :
- "이 경로에 대한 개정 번호 목록을주고
그렇게하면 저장소 경로에 대한 유효한 수정 배열을 만들어 하나씩 얻을 수 있습니다.
모든 제안을 환영합니다. 미리 감사드립니다.
해결책
가장 좋은 방법은 다음을 수행하는 것입니다. svn log -l 100 0:{$newest} .\
주어진 디렉토리 또는 파일의 첫 100 로그를 검색합니다. 그런 다음 반환 된 마지막 개정 번호를 읽은 다음 다음 100을 요청하십시오. svn log -l 100 {$last_ret_log}:{$newest} .\
이렇게하면 각 요청에 따라 99 개의 새로운 로그 항목을 얻지 만 모두받지 못할 것입니다.
다른 팁
Subversion 서버의 저장소 트리에 액세스 할 수있는 경우 사용할 수 있습니다. svnlook history
개정 번호 목록을 얻으려면.
자세한 내용은 다음에서 확인할 수 있습니다 http://svnbook.red-bean.com/en/1.1/re49.html.
방금 비슷한 결과를 얻으려고 노력했습니다. 특정 지점의 모든 개정 번호를 원합니다.
나는 다음이 매우 도움이된다는 것을 알았습니다.
svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv
이것은 별도의 줄에 모든 개정 번호가있는 파일을 제공합니다.
바라건대, 당신이나 다른 사람이 도움이 될 것입니다.
우리의 repo에는 25000 개가 넘는 개정이 있으며이 파일을 생성하는 데 몇 초가 걸립니다.
당신은보고 싶을 수도 있습니다 svn list
. 그래서 당신의 목적을 위해 :
$ svn list --verbose file:///var/svn/repos
16 sally 28361 Jan 16 23:18 README.txt
27 sally 0 Jan 18 15:27 INSTALL
24 harry Jan 18 11:27 examples/
여기에는 모든 파일의 마지막 (헤드) 개정이 나와 있습니다.
svn log url -l limitNumber - r fromReversion:toReversion
예를 들어 다음 오래된 (작은) 복귀 (버전)를 찾고 싶다면
svn log url -l 4 -r someVersion:1
or
svn log url -l 4 -r 99: 3
다음 새로운 (더 큰) 반전 (버전)을 찾고 싶다면 Toreversion보다 큰 비버
svn log url -l 4 -r someVersion:head
or
svn log url -l 4 -r 3:99
fromReversion lower than toReversion