GitLab 的最新版 6.6 采用了 Bootstrap 3 的响应式 UI,加入了两栏对比 diff 等新功能,还有众多细节改进。

小插曲:升级过程中,在升级数据库时,出现如下错误提示:


Mysql2::Error: Incorrect string value: '\xE6\x96\x87\xE4\xBB\xB6...' for column 'st_diffs' at row 1: INSERT INTO merge_request_diffs ( merge_request_id, st_commits, st_diffs ) SELECT id, st_commits, st_diffs FROM merge_requests/home/git/gitlab/vendor/bundle/ruby/1.9.1/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:287:in `query'

原因是 MySQL 的 merge_request_diffs 表使用了 latin1 字符集建立,不能容纳 UTF-8 字符。

解决方法:在 MySQL 终端中进入 gitlab 数据库,执行如下两条命令:


mysql> alter table merge_request_diffs default character set = utf8 collate = utf8_unicode_ci;
mysql> alter table merge_request_diffs convert to character set utf8 collate utf8_unicode_ci;

然后再执行

sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production

就能成功了。

有同样编码问题的表还有


broadcast_messages
deploy_keys_projects
emails
forked_project_links
merge_request_diffs
users_groups

虽然 LUG 的 GitLab 实例在其他表里没有 UTF-8 字符,但保险起见,都把默认字符集改成了 UTF-8,并把表中已有的数据转换到 UTF-8 字符集。