服務器的環境:
Ubuntu 11.10 64位
Redmine 1.4.5.stable.10943
git version 1.7.5.4 + gitolite
前言:由於redmine的版本比較低,所以新版本的配置方法有可能有差異。請實踐者留意。
redmine和git的安裝過程掠過。
由於redmine中GIT插件自身對文件讀寫權限的限制,所以一般有2種處理方式:
1)修改已經存在的GIT版本的文件讀寫權限:改為redmine運行用戶可以訪問;
2)將GIT版本庫以redmine運行用戶的身份,創建在redmine安裝目錄中。
這2種方式,對於git+gitolite已經在運行的環境,都不適合。
所以,我們解決的思路是:以redmine運行用戶身份,在redmine中創建一個新的版本庫。這個版本庫作為目前已經存在版本庫的鏡像,專門給redmine來讀取變更歷史。開發團隊日常的提交,仍然提交到原來的版本庫。利用git的hooks,將原來版本庫的更新,同步到redmine里面的鏡像版本庫。
操作步驟:
1 在gitolite中添加redmine運行用戶
例如:redmine采用apache整合的方式,默認運行用戶為www-data。以www-data用戶,運行ssh-keygen,生成ssh key。將~/.ssh/id_rsa.pub文件,拷貝到gitolite管理目錄的keydir文件夾(需要重命名.pub公鑰文件)。
cp ~/.ssh/id_rsa.pub /path/to/gitolite/admin/keydir/redmine.pub
修改gitolite的gitolite.conf配置文件,將redmine用戶添加到目標版本庫。
2 在redmine安裝目錄中創建鏡像版本庫
以redmine運行用戶(如www-data),進入redmine安裝目錄,創建git項目目錄。
mkdir git cd git git clone --mirror gituser@repo-path/repo-name.git
如果clone時,提示:
R access for leviathan/leviathan2-android DENIED to www-data fatal: The remote end hung up unexpectedly
說明第一步為git添加用戶和權限的步驟有錯誤,要返回檢查一下。
3 修改原來版本庫的hooks(*是原來的版本庫,不是新建的鏡像*)
切換操作系統用戶到安裝和創建git版本庫的user
sudo su git-user-name
進入原來項目版本庫目錄,修改hooks文件
cd /repo-path/repo-name.git/hooks
cp post-receive.sample post-receive
修改post-receive腳本,添加:
/usr/bin/git push --mirror /repo-path-to-mirror/repo-name.git
4 修改鏡像版本庫的訪問權限和添加原來git用戶到redmine運行用戶組
以redmine運行用戶(如:www-data),設置版本庫:
cd /path-to-mirror-repo/repo-name.git git config core.sharedrepository 0644
以root用戶,將git用戶添加到redmine運行用戶組
groupmod -aG www-data gituser
5 測試
在redmine中新建一個git版本庫,填入鏡像版本庫的路徑。在“版本庫”Tab標簽中,可以看到版本庫的內容。測試git hooks:在本地開發機的git中,向版本庫做一次提交。再打開redmine,看能否看到新提交的內容。