在 Redmine 中整合 Git 版本库

Redmine 的官方 Wiki 里面有许多文档可能过时了,可能并非 Best Practice 。关于如何在 Redmine 中整合 Git 版本库,这篇文章 是最简单的。我把原文做了一些修改,使用中文提供在这里:

[TOC]

我的配置

  • 我的 redmine 用户名称为: redmine ;
  • 我的安装目录在 /srv/redemine ,我的仓库文件夹为 /srv/redmine/repos
  • git 的仓库的地址为 ssh://redmine@git.mysite.com:29418/a.gitssh://redmine@git.mysite.com:29418/b.git (是的,我使用 Gerrit)。

Redmine 使用的方法,就是从远程版本库中 Clone 一个版本库,然后把所有的提交信息写入 Redmine 的数据库中。

第一步: Clone 版本库

首先使用 MIRROR 模式来 Clone 我们的版本库。Mirror 模式的版本库将仅包含提交信息而不包含具体提交的文件。这会让我们 Clone 的内容比较小,速度足够快。

1
2
3
4
sudo -su redmine
cd /srv/redmine/repos/
git clone --mirror ssh://redmine@git.mysite.com:29418/a.git
git clone --mirror ssh://redmine@git.mysite.com:29418/b.git

接下来需要让 Redmine 中配置版本库的路径。

第二步: 配置 Redmine

进入 “administration > project -> repositories” 界面开启版本库支持。然后进入 “project -> settings -> repositories” 增加版本库配置:

  • Type: GIT
  • Main-repository: 是否是主版本库。主版本库只能有一个。
  • Name: 一般是使用和版本库相同的名称。
  • Path: 版本库在服务器上的绝对路径。/srv/redmine/repos/a.git

版本库可以增加多个,可以再加入一个版本库指向 b.git 。但是主版本库只能有一个,如果两个都设置成了主版本库,那么生效的是最新的那一个。

配置完成后,进入项目的版本库界面就能看到版本库的提交历史记录和版本树了。

如果你的版本库有成百上千次提交,那么第一次打开版本库界面可能会等上一段时间,因为 Redmine 在把版本库中的提交信息写入数据库。此时最好不要刷新界面。

为了避免上面的情况,可以做离线刷新: Attaching an existing repository to a project

第三步:定时刷新版本库

Redmine 并不会主动去刷新版本库。我们可以使用 GitHook 的方式来更新版本库,也可以直接用 Crontab 来实现。

下面的代码设定每隔 5 分钟去远程仓库同步一次。

1
2
3
4
5
6
7
sudo crontab -e -u redmine
# 如果当前处于 redmine 账户下,也可以使用
crontab -e

# 选择你喜欢的编辑器,在打开的编辑器中写入下面的内容
*/5 * * * * git -C /srv/redmine/repos/a fetch --all
*/5 * * * * git -C /srv/redmine/repos/b fetch --all

设置默认显示的版本库分支

Redmine 默认显示的提交信息是仓库的默认分值(一般为 master 分支)。如果你使用了 git flow 工作流 ,那么很可能你会希望默认分支是 develop

这就出现了新问题:在使用 --mirror 参数 clone 的仓库中,你不能使用 git checkout develop 来切换工作分值。

此时你可以使用下面的命令来切换默认分支:

1
git symbolic-ref HEAD refs/heads/develop

symbolic-ref 子命令的说明在此: git-symbolic-ref

当然,你也可以直接编辑 /srv/redmine/repos/a.git/HEAD 这个文件,能达到一样的效果。

在提交信息中更新问题

在管理员面板中将版本库的 Referencing keywords 设置为: issue;将 Fixing keywords 的值设置为: fix 。

在提交信息中使用下面的语法来引用问题1,2,同时把问题3置为 已解决 状态:

这个问题 issue #1, #2 和 fix #3
这个问题 issue:#1, #2 和 fix:#3
这个问题 issue: #1, #2 和 fix: #3

文章转自:https://blog.zengrong.net/post/2606.html

CentOS下MySQL忘记root密码解决方法

CentOS下mysql忘记root密码解决方法

1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。
因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的
状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对
外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全
状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。

2.修改MySQL的登录设置:
# vim /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables
例如:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
保存并且退出vi。

3.重新启动mysqld
# service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

4.登录并修改MySQL的root密码
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.23.56
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> USE mysql ;
Database changed
mysql> UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> flush privileges ;
Query OK, 0 rows affected (0.01 sec)
mysql> quit

5.将MySQL的登录设置修改回来
# vim /etc/my.cnf
将刚才在[mysqld]的段中加上的skip-grant-tables删除
保存并且退出vim

6.重新启动mysqld
# service mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]