2009-03-30 2 views
2

작업 커밋을 업데이트하기위한 커밋 후크를 구현하려고합니다. 지금까지 나는 포스트 커밋 훅이 실행되고 있다고 (나는 그것을 검증하기 위해 파일에 뭔가를 썼다), 업데이트 명령이 실행되지 않았다는 것을 알아낼 수 있었다.게시물 커밋에서 svn 업데이트가 작동하지 않습니다.

은 우선은 내가

cd /home/user/working/copy 
svn update 

을했지만 그 후 난 당신이 SVN의 전체 경로를 제공해야 읽을 작동하지 않았다

cd /home/user/working/copy 
/usr/bin/svn update 

를하지만 여전히 작동하지 못했습니다.

퍼미션을 777로 변경하고 빈 환경에서 스크립트를 실행했습니다 ... 작동합니다.

답변

0

최종 해결책은 내가 얻은 답 중 일부를 혼합 한 것입니다. 내 서버에는 아무도 실행하지 않는 아파치가 있었기 때문에 작업 사본을 nobody와 UserName 그룹에서 소유 한 다음 chmod를 775로 만들었습니다. 이렇게하면 훅이 작동하고 사용자 이름도 다음과 같이 파일을 업데이트 할 수 있습니다. FTP.

1

작업 복사본은 사용자의 홈 디렉터리에 있습니다. SVN 서버가 다른 사용자 (예 : "svnserver")로 실행되면 커밋 후 훅 스크립트는 "svnserver"로 실행됩니다. 파일에 대한 사용 권한 설정이 허용되는 경우가 아니면 한 사용자가 다른 사용자의 파일을 수정하거나 읽을 수 없다는 것은 의미가 있습니다.

여러 사용자간에 작업 복사본을 공유해서는 안됩니다.. 정말로 필요한 경우 단순히 각 사용자에게 읽기/쓰기 권한을 부여하는 것으로 충분하지 않습니다. 또한 사용자 중 누구도 다른 사용자가 액세스 할 수없는 파일을 만들지 않아야합니다. 이를 달성하려면 적절한 umask을 설정하는 svn 명령에 대한 래퍼 스크립트를 작성하거나 모든 관련 사용자에게 sudo을 통해 하나의 특정 사용자로 작동하는 기능을 제공해야합니다.

+0

작업 사본을 어떻게 업데이트 하시겠습니까? –

+0

작업 복사본을 업데이트하는 것은 해당 작업 복사본을 사용하는 개발자가 시작해야하는 것입니다. 누군가가 커밋 할 때마다 자동으로 발생해서는 안됩니다. 작업 복사본을 자동으로 최신 상태로 유지하려고하는 이유를 설명하면 상황을 분명히 알 수 있습니다. –

+0

우리 팀의 각 개발자는 자신의 컴퓨터에 작업 복사본을 가지고 있습니다 ... 우리는 SVN 서버를 보유하고있는 서버를 온라인으로 가지고 있으며, 동일한 서버 마녀에 dev 영역을 갖고 싶습니다. 이것은 프로젝트 관리자가 최신 버전을 확인하는 데 사용됩니다. –

1

당신은 자신에 의해 workingcopy를 사용하지 않는 경우 수행 할 수 있습니다 대한 Chown 후크 스크립트

-3

내가 믿는을 실행하는 사용자에게 workingcopy 후 커밋이 가시화 커밋하기 전에 실제로 실행됩니다. 그것은 이상한 일이지만, 개정판 30을 작성했다고 말합니다.이 포스트 커미트는 여전히 29를 최신 개정판으로 간주합니다. post-commit 스크립트가 끝나면 헤드 개정판으로 30이 표시됩니다.

내가 잘못했을 수 있습니다. 이것은 엄밀히 말해서 기억에서 나온 것입니다. 적어도 시도 할 것.

+0

그것은 사전 커밋 고리가 될 것입니다. –

5
#!/bin/bash 
/usr/bin/svn update /home/user/working/copy

위의 코드는 커밋 후 후크로 작동해야합니다.

- 필요에 따라 --username & --password 옵션을 추가하십시오.

편집 :

는 서버 프로그램이 (가) (또는 svnserve 또는 아파치) 커밋 수행 http://subversion.tigris.org/faq.html#website-auto-update

보기는 포스트 커밋 후크 스크립트를 실행 할 것 같은 프로그램입니다. 즉,이 프로그램은 작업 복사본을 업데이트 할 수있는 적절한 권한을 가져야합니다.

업데이트해야하는 '작업 복사본'이 동일한 사용자가 소유 한 경우 사용자 이름 &에 대해 걱정할 필요가 없습니다.

Subversion FAQ에서는 다음과 같은 C 프로그램과 함께 Setuid를 사용하는 것이 좋습니다.

#include <stddef.h> 
#include <stdlib.h> 
#include <unistd.h> 
int main(void) 
{ 
execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/", 
    (const char *) NULL); 
return(EXIT_FAILURE); 
} 
+0

은 결제를 수행 할 때 이미 저장된 사용자 이름과 비밀번호가 아닙니다. –

+0

본인의 원래 응답을 편집하여 자세한 내용을 추가했습니다. – StackKrish

0

wcoenen의 답변은 확실히 올바른 길입니다. 이 문제를 해결하는 가장 쉬운 방법은 그룹에 SVN 사용자를 추가하는 것입니다. 포스트 커밋 훅이 someUser 및 someUser라는 사용자가 소유하고 있다고 가정 해 봅시다. SVN 서버를 someUser 그룹에 추가하고 post-commit 훅 스크립트를 그룹 실행 가능하도록 chmodding하면 문제가 해결됩니다.

나는 이해했다 희망 ... P

1

나는 또한 (공식 자주 묻는 질문에 하나를 포함하여 동일한 문제로 실행하고 시도) 행운을내는 모든 방법

물론, 나는 또한 chmod -R과 chown -R www-data : www-data를 실행할 때마다 필요하다.

대부분의 경우 업데이트 명령이 실행되었지만 사용 권한 오류가없고 다른 오류 메시지는 표시되지 않지만 작업 복사본은 업데이트되지 않습니다.

마지막으로 아래의 단계는 나를 위해 잘 작동합니다 :

에서

지금은 일하고

export LC_CTYPE=en_US.UTF-8 
cd [/working-copy-folder/] 
/usr/bin/svn update 

에 훅을 후 커밋 다음 번 후크 실행

export LC_CTYPE=en_US.UTF-8 
cd [/working-copy-folder/] # heading tail slash 
/usr/bin/svn checkout [source path] 

을 포스트 커밋 업데이트 근본 원인을 찾기에는 너무 피곤합니다. 'svn update'에 하루 종일 보냈습니다

관련 문제