2014-02-05 52 views
1

我真的不知道爲什麼會發生這種情況。無法在gitolite post-receive鉤子中執行git命令

在我的系統中,我得到了'git'用戶和gitolite。所有git回購,用戶和權限的回購工作很好,似乎gitolite配置好,至少對於基本使用。

現在我需要使用gitolite在機器上設置一個web服務器,我設置了apache,並且使用git用戶,我在www目錄中克隆了一個repo,以便通過瀏覽器訪問這些文件。

與克隆沒有任何問題,我也可以手動做一個git pull和git會從回購拉。

問題是當我嘗試每次用戶推送時自動將項目部署到www目錄。我寫了一個〜/ .gitolite /鉤/普通/後收到腳本,代碼如下:

#!/bin/sh 
dir=/var/www/onlinerepo 
if [ ! -d $dir ] ; then 
     echo "the directory $dir does not exist" 
     exit 1 
fi 

cd $dir 
git pull 
touch DONE 

我還做了一個gl-setup到腳本傳播到所有存儲庫。 當用戶按下時,我確定腳本被執行,因爲我看到/ var/www/onlinerepo/DONE文件被寫入,但沒有執行git pull。我試圖看到執行git pull命令的輸出>> OUTPUT,但它只創建一個空文件。

如果我通過命令行執行git pull命令,或者即使我通過命令行手動執行post-receive腳本,我也會看到通常的「已經最新的」信息消息。

我做錯了什麼?我真的不明白爲什麼git pull是腳本中唯一失敗的命令。

+1

也許'git的pull'只寫至標準錯誤,這你不捕捉。試試'git pull >> OUTPUT 2>&1'來獲得更好的診斷輸出。 –

+0

括號和無關的註釋:目錄存在檢查無用。如果'cd'不能更改到提供的目錄中,它會告訴你爲什麼。您的腳本可以重寫爲'cd/var/www/onlinerepo && git pull && DONE',而不會有任何功能損失。 –

+0

我對這裏的一切都很新穎,所以感謝您的反饋! 我照你說的做了,錯誤是:「致命的:不是git存儲庫:'。」 我記得在克隆時從命令行獲取錯誤,但我解決了以更好的方式指定git repo。然後我在'git pull ssh:// git @ localhost/home/git/repositories/myrepo.git'中更改了上面腳本代碼中的'git pull',但不幸的是我在OUTPUT中得到了完全相同的錯誤。該命令雖然可以從命令行正常工作。 – Jack

回答

1

我決心改變git pull

env -i git pull ssh://[email protected]/home/git/repositories/myrepo.git 
+1

因爲'env -i'會拋出所有其他的環境變量。但是,這是一個非常大的錘子(它拋出了'$ HOME')。您需要取消設置的特定變量爲「GIT_DIR」,因此在執行其他位置的其他git命令之前,請先「取消設置GIT_DIR」。 – torek

+0

謝謝你的解釋! – Jack