2012-10-16 3 views
1

CentOS 서버에서 SVN에 대한 포스트 커밋 스크립트를 실행하려고합니다. 저장소에 커밋 한 후 var/svn/project에서/var/www/project로 svn export --force를 실행하고 싶습니다. 비록 내가 많은 대안을 시도했지만 나는 그것을 작동시킬 수 없었다. 누군가가 사용자 권한 문제없이 실행할 스크립트를 게시 할 수 있다면 고맙겠습니다.SVN 포스트 커밋 내보내기가 작동하지 않습니다.

예제의/var/SVN/프로젝트/후크에서 파일을 포스트 커밋 :

내가 루트 사용자가 SSH에서 직접 스크립트를 실행하는 경우 그러나 실제 SVN 커밋되지 후 작동
#!/bin/sh 
sudo /usr/bin/svn export --force svn://domain/var/svn/project /var/www/project 

.

답변

2

sudo에 오류가 발생했습니다.

당신이하고 싶은 일이 입니다. 왜냐하면이 좋지 않기 때문입니다. 저장소가 얼마나 큰가? 얼마나 걸릴까요. 20 초? 2 분?

당신이 Subversion 사용자이고 변경 내용을 체크인하려고한다고 가정 해보십시오. 당신은 커밋을하고 갑자기 터미널이 정지 된 것처럼 보입니다. 아마도 20 초 동안, 아마 2 분 동안. 포스트 커밋 훅을 완료하는 데 필요한 모든 것. 이봐, 자네 생각에, 서브 버전은 너무 느리다 ...

더 좋은 방법은 crontab을 이용하는 것이다. 그리고 루트 권한으로 작업을 수행 할 수 있다면 확실히 crontab을 수행 할 수 있습니다.

마지막 Subversion 버전을 기록하십시오. 그런 다음 변경 사항을 감지하면 내보내기를 수행합니다. 간단한 스크립트로 구현하기 쉽고 내보내기를 기다리는 동안 Subversion을 정지시키지 않습니다.

그런데 어떤 사용자가 Subversion 서버 프로세스를 실행하고 있습니까? 그것은 후크를 실행하는 사용자입니다. /etc/sudoers 파일에 비밀번호가 필요하지 않은 사용자가없는 경우 커밋 완료 후크가 실패합니다. 또한, 서브 고리가 어떤 경로가 없기 때문에 그들은 sudo 명령을 찾을 수 없습니다, 당신은에있어 어떤 디렉토리로 접두사해야합니다. 아직

을, 당신은 그것을 얻더라도, 그것은 여전히 ​​입니다 나쁜 생각.

다음은 원하는 작업을 수행 할 crontab을 만드는 방법입니다. 완전히 테스트되지 않았습니다. 나는 오늘 밤 시간이 없다. 그러나, 그것은 당신에게 아이디어를 줄 것입니다 :

#! /bin/bash 
REPO_URL="http://...." 
DIR=... #Where you want the export 
LAST_REV_FILE=/var/run/svn.last.rev 
SVN=/usr/bin/svn 
SED=/usr/bin/sed 
current_rev=$($SVN info $REPO_URL | $SED -n '/^Revision: /s/^Revision: //p') 
if [ ! -f $LAST_REV_FILE ] 
then 
    echo $current_rev > $LAST_REV_FILE 
    exit 0 
fi 

#You're here if there is a last.rev.file 
last_rev=$(echo $LAST_REV_FILE) 
[ $last_rev -ge $current_rev ] && exit 0 

# New Revision 
echo $current_rev > $LAST_REV_FILE 
rm -rf $DIR 
$SVN export $REPO_URL $DIR 
+0

왜냐하면 사후 커밋은 커밋시 트리거되지 않습니다. 문제가 무엇인지 알 수 있습니까? – fiatux

+0

이것이 유닉스 인 경우, 포스트 커밋 스크립트는 실행 권한이 있어야하며 Subversion 서버를 실행하는 사용자가 실행할 수 있어야합니다. Windows 사용자는 post-commit.bat 파일을 호출해야하며 PATHEXT를 설정해야합니다. 테스트 할 때,'echo "POST COMMIT HOOK FAILED를 넣으십시오!" 2> & 1'을 사용하여 post-commit 후크가 실행되지만 실패 할 경우 인쇄합니다. –

+1

그것은 유닉스 서버이며 나는 포스트 커밋에 chmod 777을 시도했다. 여전히 트리거되지 않습니다. – fiatux

관련 문제