服务器的环境:
  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,看能否看到新提交的内容。