Git作为一种VCS工具在VCS工具群中,基本上就是唯一的选择了,在用过git后,还想回到svn等旧式VCS的开发者应该是不存在的。当然,作为一家私营的企业,私有的git库是必须的,你无法想象一家企业将所有的代码都开源在github上(当然,部分的还是可能的)。这里我们就需要寻找一种方便,强力,高效的git库管理工具。

现在市面上比较出名的git库管理软件和社区有github和bitbucket,两者都支持免费的开源。前者的私有项目是收费的,后者的私有项目是根据用户数量收费的,个人的私有项目免费。作为公司,当然希望尽量能免费,且有高质量的服务,那就需要开源的工具。我曾经考察过几种开源的git库管理软件,过程和细节就不详述了,当时的结论是gitblit尚堪一用,安装非常简单(一个war包),gitlab很好,但是安装太过复杂。所以当时就开始使用gitblit了,结果发现这玩意用起来功能太少了,连最基本的用户管理和组管理都没有,简直无法接受了。于是又重头回来,拾回gitlab。

项目github:https://github.com/gitlabhq/gitlabhq

0. 安装

当年就是因为gitlab的安装步骤太骇人才放弃的,回过头来一看,gitlab团队官方的installation guide是针对ubuntu的,如果OS是ubuntu的话,安装起来还不算麻烦,按步骤做就是了。我安装的是最新的6-2-stable版本,安装手册在:https://github.com/gitlabhq/gitlabhq/blob/6-2-stable/doc/install/installation.md

就像我上面说的一样,安装本身基本上不会有什么问题,我遇到的问题是邮件的发送和几个配置项的问题。

官方文档中要求安装postfix,我尝试了下,安装没问题,但是邮件发不出去,当然我的VPS是有MX record的。接下来就是无尽的配置修改,参考了:

都没解决问题,一怒之下,决定使用外部的SMTP邮件服务。申请了一个新的gmail账号,通过验证,然后修改配置文件,

/home/git/gitlab/config/environments/production.rb

[codesyntax lang="ruby"]

  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :address => 'smtp.gmail.com',
      :port => 587,
      :domain => 'gmail.com',
      :authentication => :plain,
      :user_name => '[email protected]',
      :password => '$password',
      :enable_starttls_auto => true
  }

[/codesyntax]

此外,默认的几个配置有必要了解下,都在配置文件

/home/git/gitlab/config/initializers/1_settings.rb

  • 是否允许用户注册: Settings.gitlab['signup_enabled']
  • 是否允许用户建立组:Settings.gitlab['default_can_create_group']
  • 默认的用户仓库个数上限:Settings.gitlab['default_projects_limit']

安装基本上就到这里。

1. 优势介绍

1.1 权限管理

gitlab有一个非常细致的权限职能划分,将角色分为Guest、Reporter、Developer、Master、Owner这几个。详细的权限列表可以在这里查看

1.2 群组管理

gitlab允许管理者创建用户组,并以用户组的名义管理项目,在用户组里的用户可以指定身份,并以该身份的权限访问项目。免去了控制单个用户项目权限的繁琐设置(如果没有用户组的话,你很难清除记住每个用户隶属于哪几个项目,且很难观察究竟到底有哪几个人有权限访问项目)。在gitlab里,你只需要以项目组的视角进行管理,观察是否需要向项目组中添加用户或移除用户,并设置添加进来的用户的角色。

1.3 下发的用户群组、项目管理能力

在创建完用户、用户组,并设置好用户组的Owner之后,下面的管理可以由Owner进行,方便将繁琐的项目的具体维护从运维人员的工作中分离出去(运维也不希望在某个项目需要向项目组中添加、删除成员的时候都要找上门来吧)。在配置中,创建用户和用户组的权利也可以下发到个人用户,非常灵活,当然在公司中是不建议这么做的。

1.3 SSH登录管理

使用SSH Key进行提交、拉取等所有操作的身份验证,免去了输入和记忆密码的烦恼,而且绝对安全。具体操作请查看这里。而且用户能自己修改自己的密码,gitblit连这个都做不到,囧。

1.4 API接口及系列Hooks

可以使用gitlab提供的系列API接口及Hooks创建监控系统,或者CI系统,或者等等其他的附属功能。请查看:GitLab APIWeb hooksSystem hooks

1.5 Pull Request / Merge Request

gitlab支持github式的pull request工作方式,经过无数开源项目验证的最佳“用代码说话”的工作方式。强制开发者进行code review,在最终merge代码到master之前进行团队校验。具体的工作流程,请参考这里,是sourcetree开发者atlassian的官方guide文。这个功能能很大程度上弥补公司中code review无法完善执行的弱点,并在gitlab中留下详细的数据,方便日后check。

1.6 支持Markdown的Wiki和Comments

markdown绝对是“最便于书写”的格式化富文本,可以100%替代word等编辑工具。没有尝试过的都要抓紧学习了,哈哈。gitlab官方支持其方言的markdown,并整合到了wiki、comments等各个部分。参考这里:GitLab Flavored Markdown,基本上就是github的方言。