装配配置Git服务器

安装配置Git服务器

 

安装配置Git服务器

Git服务器主要的功能有:

  • 提供多协议访问,如http(s), ssh, git(只读)
  • 可扩展,可以容纳大量仓库
  • 方便仓库管理(新增,权限管理)
  • 提供web界面,方便浏览代码及历史信息

方案使用gitolite加gitlist。

gitolite是Perl编写的管理工具,它使用ssh公钥验证的扩展来实现使用一个操作系统用户对应多个开发者,从而避免了为每个开发者在Git服务器上创建账号。此外,它可以控制哪些开发者对某些仓库或分支进行读或写的权限。管理开发者和仓库时,gitolite本身用一个特殊的git仓库(gitolite-admin)来增加、删除和修改用户和仓库。增加用户时只要把<user>.pub的公钥文件加入到keydir即可。<user>对于开发者在Git中的ID。安装配置gitolite(V3)的大致步骤有:

  1. 准备管理员公钥文件,如果没有,就用ssh-keygen生成。创建运行gitolite的用户,假设为git。该用户不需要终端登陆的权限,安装配置完成后应该把它的shell设置成/sbin/nologin。在git的home目录里创建bin目录(第三步依赖于该目录)
  2. 确保git已经安装
  3. 用git下载gitolite的代码,并执行gitolite/install -ln
    git clone git://github.com/sitaramc/gitolite
  4. 导入gitolite管理员的公钥文件
    gitolite setup -pk <admin_user>.pub
  5. 如果要让用户能够同web界面查看代码仓库,你需要修改gitolite的umask为0027,并把web服务器用户加入到git组。这样使得gitolite创建的新仓库可以被gitweb, gitlist等web服务访问。具体方法是编辑~git/.gitolite.rc文件中的UMASK选项,把它从默认的0077改成0027,然后把web服务器的用户加入到git组中去
    pw usermod www -G git # FreeBSD
    usermod www -G git # Linux
     
  6. 在远程机器上验证是否可以以管理员身份访问gitolite
    ssh git@git_server info
  7. 复制gitolite-admin仓库
    git clone git@git_server:gitolite-admin
  8. 在keydir中增加用户,在conf/gitolite.conf中增加仓库,并授权给相应的用户

gitlist是PHP编写的查看Git仓库的工具。它提供和Github类似的界面风格。gitolite-admin是特殊的仓库不应该暴露在web上,隐藏该仓库可以设置gitlist的config.ini如下:

[git]
client = '/usr/local/bin/git'
default_branch = 'master'
repositories[] = '/home/git/repositories/'
hidden[] = '/home/git/repositories/gitolite-admin'