儲存庫¶
- 目錄
- 儲存庫
一般資訊¶
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 個選項最後,請確保在 管理->設定->儲存庫->已啟用 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-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 專案設定,進入儲存庫標籤,選擇 git
作為 SCM,然後輸入儲存庫路徑(在我們的例子中是 /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 樹狀結構,並在儲存庫檢視中看到您的變更。「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 使用者之間的映射。
這是時間追蹤運作所需的。