使用 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。不過,通常您會需要一個完整的差異。