專案

一般

設定檔

動作

儲存庫

一般資訊

Redmine 原生支援與不同 SCM 工具的整合

SCM 支援的版本 註解
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 Bindings。Subversion 1.7.0 和 1.7.1 包含錯誤 (#9541)

備註 1:適當的二進制檔案必須安裝在與 Redmine相同的主機上。

例如,如果您想在 Redmine 中存取 Subversion 儲存庫,則必須在 Redmine 主機上安裝 svn 二進制檔案。

備註 2:Redmine 必須可以存取適當的二進制檔案

2 個選項
  • 它們在 PATH 環境變數中直接可用
    • 如果命令名稱不是預設名稱,您可以在 Redmine 設定檔 中重新定義它
  • 您可以在 Redmine 設定檔 中定義二進制檔案的完整路徑

最後,請確保在 管理->設定->儲存庫->已啟用 SCM 中全域啟用您想要使用的任何 SCM

將現有儲存庫附加到專案

在專案設定中,確保「儲存庫」模組已啟用,然後前往「儲存庫」標籤。
選擇與您的儲存庫對應的 SCM,並輸入儲存庫的路徑或 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 專案設定,進入儲存庫標籤,選擇 git 作為 SCM,然後輸入儲存庫路徑(在我們的例子中是 /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 樹狀結構,並在儲存庫檢視中看到您的變更。「soft」選項是必需的,因為它是一個裸儲存庫,而預設選項(mixed)會失敗,因為沒有工作樹狀結構。

如果您正在使用 GitHub,您可以使用GitHub 鉤子插件

Windows 上的裸儲存庫

如果您的 bare repository 安裝在 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

您需要確保可以在 ENV['PATH'] 和 ENV['PYTHONPATH'] 中分別找到 bzr 和 bzrlib。
例如,編輯 config/environment.rb 並新增

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

儲存庫使用者映射

在專案 -> 設定 -> 儲存庫中,有一個名為使用者的連結(在右下方)。

這允許您將具有提交權限的使用者映射到 Redmine 中的使用者。如果登入名稱/電子郵件地址相符,則會自動進行映射,否則您需要建立儲存庫使用者與 Redmine 使用者之間的映射。

這是時間追蹤運作所需的。

Go MAEDA 更新於 超過 6 年前 · 63 個修訂版本