我真的不知道爲什麼會發生這種情況。無法在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
是腳本中唯一失敗的命令。
也許'git的pull'只寫至標準錯誤,這你不捕捉。試試'git pull >> OUTPUT 2>&1'來獲得更好的診斷輸出。 –
括號和無關的註釋:目錄存在檢查無用。如果'cd'不能更改到提供的目錄中,它會告訴你爲什麼。您的腳本可以重寫爲'cd/var/www/onlinerepo && git pull && DONE',而不會有任何功能損失。 –
我對這裏的一切都很新穎,所以感謝您的反饋! 我照你說的做了,錯誤是:「致命的:不是git存儲庫:'。」 我記得在克隆時從命令行獲取錯誤,但我解決了以更好的方式指定git repo。然後我在'git pull ssh:// git @ localhost/home/git/repositories/myrepo.git'中更改了上面腳本代碼中的'git pull',但不幸的是我在OUTPUT中得到了完全相同的錯誤。該命令雖然可以從命令行正常工作。 – Jack