代码库¶
- 目录
- 代码库
通用信息¶
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 个选项最后,请确保在 管理 -> 设置 -> 代码库 -> 启用的版本控制系统
中全局启用您希望使用的任何版本控制系统
将现有的代码库附加到项目中¶
在项目设置中,确保已启用“代码库”模块,并转到“代码库”选项卡。
选择与您的代码库相对应的版本控制系统,并输入您的代码库路径或 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-data
、apache
或当您有一个非常糟糕的系统管理员时: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/
)中输入,并保存设置。查看您的仓库选项卡:您现在应该能够成功浏览您的仓库。
- 修订版本
- 年龄
- 作者
- 评论
注意:当然,这个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 用户的映射。
这是时间跟踪正常工作所必需的。