2013-03-14 97 views
1

我設置了開發/測試服務器,開發人員可以通過gitolite/git將存儲庫推送到遠程repo/webserver。 在存放點一切運作良好,開發人員可以使用,但是服務器:通過git/gitolite權限部署網站/ webapp錯誤

問題:

我要部署的代碼到Apache的DocumentRoot(chown'd阿帕奇:apcahe和chmod'd 755 )。 I am following these instructions當編輯我的後收到鉤的描述,像這樣:

#!/bin/sh 
echo "deploying to DocumentRoot" 
GIT_WORK_TREE=/var/www/www.example.com git checkout -f 

但是現在,當我從我的本地回購運行git推我得到的權限錯誤,如:

error: git checkout-index: unable to create file .gitignore (Permission denied) 
error: git checkout-index: unable to create file .htaccess (Permission denied) 

我的文檔根目錄空...後接收掛鉤作爲用戶'gitolite'運行(不知道這是否重要)。

gitolite已經在sudoers列表,所以我想運行是這樣的:

GIT_WORK_TREE=/var/www/www.example.com sudo git checkout -f 

,但這似乎並沒有任何工作,我想避免calling a separate shell script如果可能的話。

任何想法將非常感激。

+1

任何可能性,以確保'gitolite'用戶與「apache」帳戶在同一組中? – VonC 2013-03-14 12:55:28

+0

剛剛添加 gitolite 用戶到Apache組,並運行sudo post-recieve鉤現在我得到: 致命:你在一個分支還沒有出生 - PS:你如何在評論中突出顯示? – Alex 2013-03-14 13:39:35

+0

感謝@VonC我解決了這個問題,但答案是做「sudo GIT_WORK_TREE = ..... git checkout -f」 – Alex 2013-03-14 14:03:58

回答

3

首先,確保git帳戶與apache帳戶在同一個組中。
(或者你需要回去要避開我previous answer

你彙報工作的:

sudo GIT_WORK_TREE=..... git checkout -f 

但隨着裸回購,你也可以看得到:

fatal: You are on a branch yet to be born 

(我不會建議試圖讓你的gitolite管理回購非裸露的一個在這個blog post

git config core.worktree /home/user/myproject 
git config core.bare false 
git config receive.denycurrentbranch ignore 

我喜歡確保/var/www/www.example.com目錄是一個混帳回購協議,在其中您可以拉動,而不是試圖結賬。
所以我喜歡的鉤是更:

cd /var/www/www.example.com 
git --git-dir=/var/www/www.example.com/.git --git-work-tree=/var/www/www.example.com pull 

(與origin,用於通過缺省由git pull遠程名稱,指的的gitolite裸回購)

+0

不錯..事實證明,我所做的工作完美,除了(一)權限是一個問題。 (b)sudo在錯誤的地方。非常感謝VonC – Alex 2013-03-14 14:10:10