2013-04-07 102 views
3

我在本地和我的服務器上設置了git,並創建了一個'post-receive',這樣當我推送到活動服務器時,它應該檢出到網站的虛擬主機目錄。Git Post-Receive的權限

#!/bin/sh 
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f 

但是,當我嘗試做我推,它超出了主成功,但我得到試圖在我的服務器Web根目錄創建這些文件時,權限被拒絕的錯誤。

例如remote: error: unable to create file index.php (Permission denied)

由於我設置我的服務器的方式,這些錯誤實際上對我有意義。我禁用了root訪問權限並創建了一個通過visudo添加到sudoers的新用戶 - 然後爲此用戶設置SSH密鑰。我使用這個用戶推出我的git更改到服務器。

問題是,我相信我連接推送的這個用戶沒有寫入虛擬主機目錄的權限。這些文件夾中的所有文件都由具有相同組的www-data(我的nginx用戶)擁有。

解決方案是什麼?使用SSH密鑰創建另一個用戶來連接具有更高權限的git,或者有辦法像授予能力那樣授予接收後的sudo?

對於這個漫長而囉嗦的問題抱歉,但想要完全清楚我所做的。

回答

0

如果你的回購與--shared選項創建(見「Change GIT repository to shared」),這將允許從同組用戶訪問和寫入。

有什麼辦法可以將同一組中的不同用戶分組嗎?
有點像「Git unable to create file permission denied」同一組中提到的那樣。
或sud​​o訪問,在this question的意見作爲解釋,改變sudoers的:

git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom 
+0

感謝您的答覆。但要清楚的是,我沒有任何問題推到服務器上的回購站,當post-receive試圖將文件複製到我遇到的問題的web根目錄時。那裏的文件由www-data擁有,以便Web服務器可以寫入/正確運行它們。例如從管理員添加插件。 – bbish007 2013-04-07 17:44:34

+0

此外,它是我用來使用ssh推送遠程的用戶,它不具有複製和覆蓋Web根目錄中文件的權限。我覺得我正在俯視一些明顯的東西! – bbish007 2013-04-07 17:46:27

+0

@ bbish007唯一可以幫助的事情(除了使用sudo權限執行命令之外)是讓該用戶與web根目錄中的文件組在同一組中。 – VonC 2013-04-07 17:49:10