2010-11-30 2 views
1

나는 post-commit hook을 쓰고 있는데, svn diff -summarize를 사용하여 변경된 내용의 요약을 얻는다. 파일/폴더가 추가되거나 수정 될 때, 나는 항상 자동으로 업데이트 된 작업 카피에서 파일 유형을 얻을 수 있습니다. 그러나 파일이나 폴더가 삭제되면 svn diff -summarize의 항목이 파일인지 폴더인지 여부를 알 수 없습니다.SVN diff의 항목이 파일인지 폴더인지 식별하는 방법은 무엇입니까?

해결 방법 한 가지 해결 방법은 다른 작업 복사본을 유지하고 자동으로 업데이트하지만 다른 작업 복사본 뒤에 항상 한 개정을 유지하는 것입니다. 그렇게하면 파일/폴더가 삭제 된 경우 오래된 작업 복사본으로 가져올 수 있습니다. 그러나 이것은 내가 이것을 수행하는 비효율적 인 방법이라고 생각합니다. 동시에 두 개의 서로 다른 작업 복사본을 유지해야합니다. SVN에이 작업에 도움이되는 것이 있는지 궁금합니다.

답변

2

모든 유형의 svn 후크를 작성할 때 저장소 나 트랜잭션에 대한 정보가 필요하면 쉘 스크립트에서 svnlook 프로그램을 사용하거나 원하는 언어로 svn API를 사용하고자합니다. svnlook을 사용하면 인증 확인 레이어를 포함하여 모든 svn RA (원격 액세스) 코드를 무시하므로 스크립트가 서버 컨텍스트에서 실행되기 때문에 더 빠르며 문제가되지 않습니다. 또한, 파일 형식 정보 이외의 다른 용도로 사용하지 않는 작업 복사본을 업데이트하는 데 따른 추가 오버 헤드가 없습니다.

svnlook에는 개정판 (사후 * 후크)과 트랜잭션 (사전 * 트랜잭션)을 모두 조사 할 수있는 다양한 옵션이 있습니다. 여기에 특히 흥미로운 것은 changed 옵션입니다. 개정 또는 거래를 만들어

            
 
changed: usage: svnlook changed REPOS_PATH Print the paths that were changed. Valid options: -r [--revision] ARG : specify revision number ARG -t [--transaction] ARG : specify transaction name ARG --copy-info : show details for copies

변화는과 같이 표시됩니다 : 디렉토리를 참조 할 때 svnlook에서

A trunk/src/new-dir/ 
A trunk/src/new-dir/newheader.h 
A trunk/src/new-dir/newsrc.c 
U trunk/src/existingsrc.c 

출력은 항상 /로 끝납니다. 이것은 파일이나 디렉토리를 탐지하기위한 쉬운 구분자입니다.

그러나 삭제를 처리 할 때 사소한 일이 조금 있습니다. 디렉토리가 삭제되면 디렉토리 아래의 모든 항목도 제거되며이 정보는 changed에 표시되지 않습니다. 여기를 참조하십시오 :

당신이 어떤 형태 찾고있는 당신은, 내가 생각하는거야에서 무엇을 찾고있는 설명을 바탕으로
D trunk/src/new-dir/ 
U trunk/src/existingsrc.c 

보고 후 커밋합니다. 그렇다면 the subversion mailer post-* hook을 확인하시기 바랍니다. 결과를 전자 메일로 보내지 않으려 고하더라도이 코드는 svn API를 사용하여 트랜잭션 또는 수정 내용을 확인하는 방법을 보여줍니다.

+0

와우, 나는 그것에 대해 생각해 본 적이 없었습니다. 질문에 대답 해 주셔서 감사합니다. 비록 이미 포기하고 힘내게되었습니다. –

+0

@BrunoDeBarros 나는 당신을 비난한다고 말할 수 없다. 4 개월은 누구든지 재검토 할 수있는 충분한 시간입니다. –

관련 문제