2010-12-09 5 views
2

나는자식 후크 권한 문제

/live/website 
     | 
     | 
/path/to/staging (bare) 
    |   | 
    |   | 
dev1  dev2 

는 현재 두 디바이스 1 및 디바이스 1에서, /path/to/staging repo에 프로젝트를 밀어 (또 다른 질문 git : Small project work의 추천 덕분에) 내 자식 작업 구조를 설정했습니다. 내/라이브/웹 사이트에서 git pull을 자동으로 트리거하는/path/to/staging에 후크가 있습니다. 이 방법으로, 거기에 파일의 작업 복사본이 있습니다.

또한 /path/to/staging (bare)은 공유 = 0777로 초기화되었으므로 공유가 문제가되지 않는다는 것을 알고 있습니다. 또한, 나는 777에 모든 파일을 CHMODded했고 막대기 비트도 설정했다.

/live/website repo를 user : root으로 생성했습니다. 그러나 dev1에서 repo를 user : dev1으로 생성했습니다.

error: Couldn't set refs/remotes/origin/master 
From /path/to/staging 
! 8b4fddc2 .. e2a0b21 master  -> origin/master (unable to update local ref) 
To path/to/staging 
    8c5fddc2 .. e2a0b21 master -> master 

을 그리고 기본적으로, 파일이/라이브/웹 사이트에 성공적으로 전송이 표시되지 않는 : 나는 DEV1에서 REPO를 밀어하려고 할 때 그러나, 디바이스 1 미세 변화를 만들 수 있습니다, 여기에 내가 직면하고있는 문제입니다. 나는이 코드가 user : dev1으로 실행되기 때문에이 문제가 발생한다고 생각한다. 그러나 /live/websit e로 찾아 git pull을 수동으로 user : root으로 입력하면 dev1에서 변경 한 내용을 성공적으로 가져와 작업 파일을 변경합니다.

이 문제를 해결할 방법이 있다면 누군가에게 권장 할 수 있습니까? 나는 그것이 실행될 때, 그러나

su root 
password 

: 그것은 자동 후크의 목적을 ... 뛰는 때문에 내가하고 생각을 다른

뭔가 훅에 있었다, 나는 사용자를 변경하는 생각 I 나타나는 오류 메시지이기 때문에 내가 프롬프트에서 암호를 입력 있다고 생각하지 않습니다,

hooks/post-receive: line 18: password: command not found 

편집

또한 누군가가 푸시에서 돌아갈 방법을 제안 할 수 있습니까? 파일의 이전 상태를 얻으시겠습니까?

답변

1

AFAIK 명령 줄에서 su를 사용할 수 없습니다. 그러나 sudo를 사용하여 허용 된 사용자를 암호가없는 인 /etc/sudoers에 추가하면 sudo -u webside-user-name 'cd /live/website && git fetch && git checkout master'과 같은 명령을 실행할 수 있습니다.

+0

루디 : 나는 그 파일을 보았고 sudo visudo 만 수정하면됩니다. 그러나, 나는 그것을 시도하고 실행할 때 :'sudo : visudo : command not found'. 편집은 문제가되는 부분입니다. git 디렉토리 구조의 관점에서 왜 당기기를 실행하는 데 문제가 있는지 알고 있습니까? 제 말은'/ live/website'는 공유 저장소입니다. 나는'git repo-config core '를 사용하여 그렇게 만들었다.sharedRepository true' – g1t

+0

root 계정으로 들어가서 거기에서 visudo를 실행할 수 있습니까? 데비안에서 visudo는 sudo 패키지 (http://packages.debian.org/lenny/i386/sudo/filelist)에 있으며/usr/sbin/visudo에 있습니다. – Rudi

+0

'/ live/website' 부분은 :'/ path/to/staging' 저장소를 아직 설정하지 않았습니까? 그렇다면'/ live/website'는 파일이 보이길 원하기 때문에 non-bare repo 여야합니다. 현재/live/website 경로를 옮기고'/ live/website'의 일반 복제본으로 바꾸는 것이 좋습니다. – Rudi

0

나는 비슷한 워크 플로를 사용하고 있으며 라이브 웹 서버에서도 루트 액세스 권한이 없으며 여전히 정상적으로 작동합니다. 여기에 내가 사용하고 스크립트의 (이 포스트받을 후크입니다, 내가 대신 이후 업데이트 훅이 될 수도있을 것 같군요하지만 난 것을 테스트하지 않았습니다) :

 
#!/bin/sh 
# To enable this hook, make this file executable by "chmod +x post-receive". 
GIT_WORK_TREE=/path/to/htdocs git checkout -f 

는 그런 다음 실행하여 후크를 테스트 할 수 있습니다 후크/후 수신. 수동으로 테스트 할 때 작동하면 "git push"를 실행할 때 작동합니다.