项目

通用

个人资料

操作

代码库

通用信息

Redmine 原生支持与不同的版本控制系统集成

版本控制系统 支持的版本 评论
Bazaar 1.0.0.candidate.1 到 2.7.0
CVS 1.12.12, 1.12.13 需要 1.12 版本,不与 CVSNT 兼容
Git 1.5.4.2 到 2.11.0
Mercurial 1.2 到 4.3.1 建议使用 1.6 或更高版本 (#9465)
Subversion 1.3 到 1.9.7 需要 1.3 或更高版本。不支持 Subversion 的 Ruby 绑定。Subversion 1.7.0 和 1.7.1 包含缺陷 (#9541)

注意 1:适当的二进制文件 必须 安装在 与 Redmine 相同的主机 上。

例如,如果您想通过 Redmine 访问 Subversion 代码库,您必须在 Redmine 主机上安装 svn 二进制文件。

注意 2:适当的二进制文件必须可以通过 Redmine 访达

2 个选项
  • 它们直接在 PATH 环境变量中可用
    • 如果命令名称不是默认的,您可以在 Redmine 配置文件 中重新定义它
  • 您可以在 Redmine 配置文件 中定义二进制文件的完整路径

最后,请确保在 管理 -> 设置 -> 代码库 -> 启用的版本控制系统 中全局启用您希望使用的任何版本控制系统

将现有的代码库附加到项目中

在项目设置中,确保已启用“代码库”模块,并转到“代码库”选项卡。
选择与您的代码库相对应的版本控制系统,并输入您的代码库路径或 URL。

重要:当您首次浏览代码库时,Redmine 会检索所有现有提交的描述并将它们存储在数据库中。
这仅在代码库中执行一次,但如果您的代码库有数百个提交,则可能需要很长时间(甚至超时)。

为了避免这种情况,您可以在离线状态下进行操作。
在 Redmine 中声明您的代码库后,运行以下命令

$ ./bin/rails runner "Repository.fetch_changesets" -e production

所有提交将被检索到 Redmine 数据库中。

从 0.9.x 版本开始,您还可以通过 WS 调用一个 URL 来执行 fetch_changesets

http://redmine.example.com/sys/fetch_changesets?key=<WS key> (=> fetches changesets for all active projects)
http://redmine.example.com/sys/fetch_changesets?key=<WS key>&id=foo (=> fetches changesets for project foo only)

别忘了启用仓库管理WS,并将配置在仓库管理WS API密钥设置中的WS密钥认证信息添加进去。

请参阅如何在Redmine提交时自动刷新仓库以获取示例。

Subversion仓库

支持常规协议(例如,http:svn:file:),只需输入仓库的URL。

例如

http://host/path/to/the/repository

如果仓库需要认证,您可以指定用户名和密码。

注意:如果您想使用svn+ssh://访问仓库,您需要将svn+ssh配置为非交互式。
这需要您为ssh认证设置一个公钥/私钥对。

CVS仓库

输入
  • 仓库的URL(可以是路径或连接字符串,例如:pserver)。
  • 模块名称

例如

:pserver:login:password@host:/path/to/the/repository

Git仓库

(另请参阅如何轻松将SSH加密的Git仓库集成到Redmine中。)

本地环境设置

Redmine需要一个本地的仓库,以便通过Redmine进行浏览。

想象一下,您想浏览待办事项列表管理器项目"Donebox":其克隆URL是git://github.com/ook/donebox.git
在您运行Redmine的服务器上创建一个可由运行您的Redmine服务器用户访问的目录

$ sudo mkdir -p /var/redmine/git_repositories
$ sudo chown rails:rails /var/redmine/git_repositories
$ cd /var/redmine/git_repositories

注意第二行:它将新创建的目录的所有权更改为用户rails和组rails。当然,您必须根据您的服务器设置进行替换(可以是www-dataapache或当您有一个非常糟糕的系统管理员时:root)。请记住,此用户需要有运行git命令的(本地)权限。

创建裸仓库

在执行前面的步骤之后,现在是时候创建我们的裸仓库了

$ pwd
/var/redmine/git_repositories
$ git clone --bare git://github.com/ook/donebox.git donebox.git
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
remote: Counting objects: 401, done.
remote: Compressing objects: 100% (246/246), done.
remote: Total 401 (delta 134), reused 401 (delta 134)
Receiving objects: 100% (401/401), 179.55 KiB | 185 KiB/s, done.
Resolving deltas: 100% (134/134), done.
$ cd donebox.git

我们的裸仓库已成功创建!现在转到您的Redmine项目设置,转到仓库选项卡,将SCM选择为git,然后在仓库路径(在我们的示例中为/var/redmine/git_repositories/donebox.git/)中输入,并保存设置。查看您的仓库选项卡:您现在应该能够成功浏览您的仓库。

注意:根据缺陷#8548,如果您设置了报告文件和目录的最后提交,则将在仓库文件和目录列表中添加四个列
  • 修订版本
  • 年龄
  • 作者
  • 评论

注意:当然,这个git仓库不会自动更新。您需要手动定期执行git fetch,设置一个cron作业,该作业将自动为您执行git fetch命令。

要使您的仓库(以及所有分支)每10分钟刷新一次,您可以添加一个cron作业,如下所示

*/10 * * * * cd /srv/repos/git/myrepo.git && git fetch origin +refs/heads/*:refs/heads/* && git reset --soft

或者您可以使用post-receive钩子,如下所示

echo "Post receive-hook => updating Redmine repository" 
sudo -u my_redmine_user -p secret perl -we '`cd /redmine/repositories/my_repo.git && git fetch && git reset --soft refs/remotes/origin/master`'

注意git reset,您将需要它来更新git树并看到在仓库视图中您的更改。由于这是一个裸仓库,需要“软”选项,因为默认选项(混合)会失败,因为没有工作树。

如果您使用github,可以使用Github Hook插件

Windows上的裸仓库

如果您的裸仓库安装在Windows上,请添加

;%GIT_PATH%\cmd;%GIT_PATH%\bin;
将路径设置到您的 %PATH% 环境变量中。
其中 %GIT_PATH% 是 Git 的安装目录(例如:C:/Git

设置镜像仓库(快捷方式,跟踪分支)

上述方法在大多数情况下都工作得很好,但如果您有多个分支(不仅仅是 master 分支),则需要对其进行大量调整才能使其正常工作。有关问题和解决方案的更多信息,请参阅此 Stack Overflow 问题

此方法可以帮助保持仓库分支与 Redmine 仓库浏览器的更新和可见性。这仅在本地仓库副本仅作为只读副本用于 Redmine 时才相关。例如,项目托管在 GitHub 上,但 Redmine 用于问题跟踪。

$ pwd
/var/redmine/git_repositories
$ git clone --mirror git://github.com/ook/donebox.git donebox.git
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
remote: Counting objects: 717, done.
remote: Compressing objects: 100% (561/561), done.
remote: Total 717 (delta 320), reused 371 (delta 134)
Receiving objects: 100% (717/717), 211.35 KiB | 86 KiB/s, done.
Resolving deltas: 100% (320/320), done.
$ cd donebox.git
$ git branch
  WW
  asap
  bugcat
  comeback
* master

此方法依赖于 git clone 命令中可用的 --mirror 选项。对于旧版本的 git,此选项可能不可用。在这种情况下,请参阅 Stack Overflow 问题,以获取一些在不使用 --mirror 选项的情况下设置此类镜像功能的想法。

Mercurial 仓库

要与 Mercurial 仓库同步,您必须在安装 Redmine 的同一服务器上有一个本地仓库副本。假设您将 Redmine 放在 /var/www/redmine.example.com/www 中,并将您的 Mercurial 仓库放在 /var/www/sources.example.com/repo/example 中,您必须选择 Mercurial 作为 SCM,然后在仓库文本框中输入 /var/www/sources.example.com/repo/example

这将开始检出 Mercurial 仓库,您不会立即看到结果。等待几秒钟(或可能是几分钟),然后点击项目(不是配置设置)的 仓库 选项卡。您现在应该看到结果出现。

Redmine 不同步(推送/拉取)外部仓库,但您可以在获取更新之前设置一个脚本来执行此操作。
hgsync.sh

#!/bin/bash
for file in /var/www/sources.example.com/*; do
   if [ -d $file ]; then
      cd $file; hg pull -u
   fi
done

Bazaar 仓库

在 "根目录" 中输入您的仓库的完整路径
例如:/home/username/bzr/repo/trunk

您需要确保 bzr 和 bzrlib 分别可以在 ENV['PATH'] 和 ENV['PYTHONPATH'] 中找到。
例如:编辑 config/environment.rb 并添加

ENV['PYTHONPATH'] = '/path/to/pythonlib'
ENV['PATH'] = "#{ENV['PATH']}:/path/to/bzr/bin" 

仓库用户映射

在项目 -> 设置 -> 仓库中有一个链接叫做用户(在右下角)。

这允许您将提交的用户映射到 Redmine 中的用户。如果登录名/电子邮件地址匹配,映射是自动的;否则,您需要建立仓库用户到 Redmine 用户的映射。

这是时间跟踪正常工作所必需的。

最后更新于 Go MAEDA 6 年前 · 63 次修订