專案

一般

設定檔

動作

使用 Git 為 Redmine 做出貢獻

此 Wiki 已過時.

Redmine 的原始碼樹儲存在 Subversion 中,所有內容最終都會匯入其中。有些熟悉 Git 的人更喜歡使用它來進行分支和合併,因為您不需要擁有 SVN 提交權限即可提交。

注意:截至撰寫本文時,complete.org 上的 git 儲存庫並未保持最新狀態,最後一次變更是在 2008 年 9 月 8 日星期一進行的。建議複製 GitHub 鏡像 以取得最新的開發成果。

如果您正在尋找 Subversion 的說明,可以在下載簽出頁面上找到。

初始化

如果您還沒有 Git,請參閱下方連結中的 5 分鐘 Git 指南以取得下載資訊。您需要至少 1.5.x 版本的 Git。
首先,請執行以下指令

git clone git://git.complete.org/branches/redmine-integration
cd redmine-integration
git config --add remote.origin.fetch +refs/remotes/svn/*:refs/remotes/svn/*
git fetch

探索

您可以看到 Git 為您取得的所有分支

git branch -r | less

您將會看到如下輸出(此處省略了許多行)

  origin/HEAD
  origin/fb-bug-259-git
  origin/fb-bug-261-issue-redirect
  origin/fb-bug-641-context-done
  svn/git
  svn/issue_relations
  svn/mailing_lists
  svn/tags/0.6.3
  svn/tags/0.6.3@1011
  svn/time
  svn/trunk
  svn/wiki

「origin」分支正在 Git 中維護(沒有對應的 Subversion 分支)。svn 分支是 Redmine Subversion 儲存庫中相同分支的相同副本。

您將根據這些分支進行工作。

開始您的功能

使用 git,分支很便宜且合併很容易,因此您通常會想要為您處理的每個功能啟動一個新分支。當您提交修補程式時,單個分支可能對應於 Redmine 中的單個議題。

您會希望將您的修補程式基於 svn 主線。所以您將像這樣設置一個分支

$ git branch my-feature svn/trunk
Branch my-feature set up to track remote branch refs/remotes/svn/trunk.
$ git checkout my-feature

第一行建立了一個名為 my-feature 的分支,它將基於 svn/trunk。第二個指令會簽出該分支,這表示您的工作副本已切換到該分支,並且您所做的任何提交都將發佈到該分支。

請注意,提交的動作不會將任何修補程式發送給其他任何人;由於 Git 是分散式的,因此只有在您準備好將提交推送到上游之前,提交才會在本機記錄。

您可以執行 git branch 來查看您所在的分支 - 它旁邊會有一個星號,如下所示

$ git branch
  master
* my-feature

開發您的功能

現在您已經建立了您的分支,是時候開始工作了。

以下是一些您可能想要使用的指令

任務 指令
提交未完成的變更 git commit -a
將新檔案新增至儲存庫 git add 檔案名稱
從資源庫和工作目錄中移除檔案 git rm 檔案名稱
重新命名資源庫和工作目錄中的檔案 git mv 舊檔名 新檔名
檢視歷史記錄 git log
取得說明 git 指令名稱 --help

請注意,git 指令git-指令 相同。您可以使用 man git-指令 來查看任何 Git 指令的操作說明。

與主幹合併

如果您處理功能已有一段時間,您可能會發現 Subversion 已更新。理想情況下,您最終的差異會與最新的主幹版本一起運作,因此您會希望您的修補程式能與其搭配使用。若要更新您的修補程式以套用在最新的主幹之上,請執行以下操作

git fetch
git rebase svn/trunk

提交您的修補程式

完成修補程式的處理後,請確定您已將其提交至 Git。然後,您可以產生差異。

您可以產生一個包含您在分支上所做的所有變更的大差異,即使這些變更是在多次提交中進行的。執行以下命令

git diff svn/trunk..HEAD > /tmp/feature.diff

這表示「計算主幹與此分支上最新提交之間的差異,並將其作為差異儲存在 /tmp/feature.diff 中」。然後前往 redmine.org,建立一個議題,並將 /tmp/feature.diff 附加到該議題。

如果您希望為每個提交提交一個修補程式,只需執行 git format-patch svn/trunk。您將會為每個提交產生一個檔案,其中包含提交日誌。然後,您需要將這些檔案附加到 redmine.org。不過,通常您會需要一個完整的差異。

外部連結

由 MARUYAMA Toshi 更新於 超過 12 年前 · 10 個版本