[svn] SVN에서 마지막 개정 번호를 받고 있습니까?

PHP, Perl 또는 Python (가급적 PHP)을 사용하여 SVN 데이터베이스를 쿼리하고 SVN으로 전송 된 마지막 개정 번호를 찾을 수있는 방법이 필요합니다. 그 외에는 필요 없습니다. 집약적이지 않아야합니다 (그래서 저는 크론 작업으로 5 분마다 수행합니다. SVN의 성능에는 영향을주지 않아야합니다).

SVN은 내 인트라넷에 있지만 특정 컴퓨터에는 없습니다.

SVN이 설치되어 있지만 PHP / Perl / Python 용 바인딩이 설치되어 있지 않습니다. 저는 Windows XP를 실행하고 있지만 Linux에서도 작동 할 수있는 플랫폼 독립적 인 솔루션을 선호합니다. Linux 전용 (또는 XP 전용) 솔루션이있는 경우에도 도움이됩니다.



답변

<?php
    $url = 'your repository here';
    $output = `svn info $url`;
    echo "<pre>$output</pre>";
?>

다음과 같이 XML로 출력을 얻을 수 있습니다.

$output = `svn info $url --xml`;

오류가 있으면 출력이 stderr로 지정됩니다. 출력에서 stderr를 캡처하려면 다음을 사용하십시오.

$output = `svn info $url 2>&1`;


답변

로컬 작업 복사본을 분석하려는 경우 가장 좋은 도구는 svnversionSubversion과 함께 제공되며 968:1000M. 문서는 다음과 같이 말합니다.

작업 복사본이 수정되지 않고 변경되지 않고 TRAIL_URL 인수와 일치하는 URL이있는 단일 개정 인 경우 버전 번호는 단일 번호입니다. 작업 복사본이 비정상적인 경우 버전 번호가 더 복잡해집니다.

4123:4168     mixed revision working copy
4168M         modified working copy
4123S         switched working copy
4123:4168MS   mixed revision, modified, switched working copy

답변

svn info -r HEAD

그러면 저장소 헤드에 최신 개정 번호가 표시됩니다.

빌드 스크립트에 Subversion 번호를 통합하는 방법에 대한 멋진 블로그 게시물이 있습니다.


답변

이것은 작업 디렉토리의 Bash에서 작동합니다. 나는 unixutils가 설치된 Windows에서 사용했습니다 .

svn info |grep Revision: |cut -c11-


답변

다음이 작동합니다.

svnlook youngest <repo-path>

단일 개정 번호를 반환합니다.


답변

원격 저장소 에서 최신 개정 ( “헤드 개정”) 번호를 얻으려면 다음을 사용하십시오.

svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"

예를 들어 출력 :

35669


답변

최신 개정 번호 받기에 대한 참고 사항 :

cd수정 된 하위 디렉토리 ( MyProjectDir) 에서 -ed 했다고 가정 해보십시오 . 그런 다음 전화하면 svnversion:

$ svnversion .
323:340

… ” 323:340” 이 표시됩니다. ” ” 여기에 수정 버전 323에서 340까지의 항목이 있습니다 .

 

그런 다음 전화하면 svn info:

$ svn info
Path: .
URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir
Repository Root: svn+ssh://server.com/path/to/MyProject
Repository UUID: 0000ffff-ffff-...
Revision: 323
Node Kind: directory
Schedule: normal
Last Changed Author: USER
Last Changed Rev: 323
Last Changed Date: 2011-11-09 18:34:34 +0000 (Wed, 09 Nov 2011)

… 나는 ” 323“개정판을 얻습니다 -이것은 실제로 보고 한 것들 중 가장 낮은 개정판입니다 svnversion!

 

그런 다음 svn info재귀 모드에서 사용하여 로컬 디렉토리에서 더 많은 정보를 얻을 수 있습니다.

> svn info -R | grep 'Path\|Revision'
Path: .
Revision: 323
Path: file1.txt
Revision: 333
Path: file2.txt
Revision: 327
Path: file3.txt
Revision: 323
Path: subdirA
Revision: 328
Path: subdirA/file1.txt
Revision: 339
Path: subdirA/file1.txt
Revision: 340
Path: file1.txt
Revision: 323
...

… ( grep자세한 내용을 보려면을 제거 하십시오).

 

마지막으로 온라인 저장소 의 최신 개정판 (이 경우 @ server.com) 을 확인하려면 어떻게해야 합니까? 그런 다음 다시 발행 svn info하지만 -r HEAD( -R이전 자본 옵션과 -r지금은 소문자 의 차이점에 유의하십시오 ) :

> svn info -r 'HEAD'
USER@server.com's password:
Path: MyProjectDir
URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir
Repository Root: svn+ssh://server.com/path/to/MyProject
Repository UUID: 0000ffff-ffff-...
Revision: 340
Node Kind: directory
Last Changed Author: USER
Last Changed Rev: 340
Last Changed Date: 2011-11-11 01:53:50 +0000 (Fri, 11 Nov 2011)

흥미로운 점은- svn info여전히 현재 하위 디렉토리 ( MyProjectDir)를 참조하지만 온라인 경로는 MyProjectDir( .로컬 케이스와는 반대로 )로보고되고보고 된 온라인 개정은 가장 높고 ( 340-가장 낮은 버전 과 반대로 323보고 됨) 토지 상에서).