首页 > 代码库 > redmine整合GIT版本库

redmine整合GIT版本库

服务器的环境:

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 gitcd gitgit clone --mirror gituser@repo-path/repo-name.git

如果clone时,提示:

R access for leviathan/leviathan2-android DENIED to www-datafatal: 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.gitgit config core.sharedrepository 0644

以root用户,将git用户添加到redmine运行用户组

groupmod -aG www-data gituser

5 测试

在redmine中新建一个git版本库,填入镜像版本库的路径。在“版本库”Tab标签中,可以看到版本库的内容。测试git hooks:在本地开发机的git中,向版本库做一次提交。再打开redmine,看能否看到新提交的内容。

redmine整合GIT版本库