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`;
답변
로컬 작업 복사본을 분석하려는 경우 가장 좋은 도구는 svnversion
Subversion과 함께 제공되며 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 번호를 통합하는 방법에 대한 멋진 블로그 게시물이 있습니다.
답변
답변
다음이 작동합니다.
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
보고 됨) 토지 상에서).