管理員使用Git指導

出自MoodleDocs
前往:導覽、​搜尋

此頁描述了如何維護生產服務器上Moodle的複本,並通過Git進行輕鬆地升級。如果你修改過Moodle的核心代碼,那麼建議你按照Moodle開發的Git快速開始指導的說明文檔來執行。

花費時間與精力去理解Git大部分的基礎概念是值得的——參見下面的另請參閱部分。學習過程可能是曲折的,尤其是之前使用CVS或Subversion管理代碼的管理員。

獲得Git

Git設計之初僅限於支持Linux,但是現在可以支持大部分流行的操作系統:

一旦下載並安裝完與系統相對應的Git應用程序,此文檔內的Git命令就應當可以在你的操作系統上正常運行了。

從Git獲取源碼

此處討論Git的命令行版本問題。圖形化的客戶端比命令行版本的封裝更小,所以應該能從此處很容易的推斷出正確的參數。

Git的Moodle官方知識庫為git://git.moodle.org/moodle.git(還有一個官方的克隆地址(git://github.com/moodle/moodle.git))。使用如下命令行初始化你的本地檢出:
$ cd /path/to/your/webroot
$ git clone git://git.moodle.org/moodle.git (1)
$ cd moodle
$ git branch -a (2)
$ git branch --track MOODLE_27_STABLE origin/MOODLE_27_STABLE (3)
$ git checkout MOODLE_27_STABLE (4)
  • 命令(1)初始化了新的本地庫以作為「上游(upsteam)」moodle.git庫(如,基於遠程服務器)的克隆體。默認稱上游庫為「原點(origin)」。創建新的名為moodle的目錄,用以存放所有下載的文件。此次操作可能花費一些時間,因為其需要獲取所有Moodle版本的全部歷史信息。
  • 命令(2)列出了所有可用分支。
  • 命令(3)創建了一個全新的名為MOODLE_27_STABLE的本地分支,並將其設置為跟蹤上游庫的遠程分支MOODLE_27_STABLE。
  • 命令(4)事實上是用於切換到新建的本地分支。

需要注意的是Git的每個命令都有數量龐大的選項,僅使用一個獨立的命令確實可以完成上述過程(留下來做一個練習!!)。

穿過防火牆使用Git

Git所用的只讀協議可能會被你的防火牆(9418端口)阻擋在外。如若真的遇到此問題,可以使用Github的http版本https://github.com/moodle/moodle.git。這個版本有點慢,但是可以用的話還是用它吧。

更新安裝程序

每周一、周二,Moodle開發團隊會對修復的bug進行整合併測試。到了周三就可以通過更新代碼的方式安裝所有補丁包了。查驗簡短日誌(shortlog)以確認官方資源庫是否已經更新了。

更新代碼到最新版本(MOODLE_27_STABLE的分支)所需做的所有事情是:
$ cd /path/to/your/moodle/
$ git pull
如果更新的是生產站點,那麼仍然需要考慮升級說明文檔的問題(如,備份系統)。

從Git庫中安裝提供的擴展

這是從其他Git資源庫向你的Moodle資源庫添加插件的一種處理方式。另一種方式是使用Git子模塊。然而,在編輯此篇文章時,Git子模塊功能仍然是粗糙的、有待完善的功能,應當被當作進階選項來看待。

例如,我們想從Git資源庫向Moodle2.7安裝認證模塊
$ cd /path/to/your/moodle/
$ cd mod (1)
$ git clone https://github.com/markn86/moodle-mod_certificate.git certificate (2)
$ cd certificate
$ git checkout -b MOODLE_27_STABLE origin/MOODLE_27_STABLE (3)
$ git branch -d master (4)
命令(1)將當前目錄變更為本地Moodle克隆的mod文件夾。命令(2)創建了一個新的子目錄certificate,然後在本地克隆了普通的認證庫。命令(3)創建了新的本地分支以通過Moodle2.7的證書版本跟蹤遠程分支。命令(4)刪除了在命令(2)執行時自動創建的master,因為我們不想把它放在生產檢出環境裡。 注意:需要先檢查模塊是否與Moodle分支兼容,可以通過直接詢問之前克隆軟件庫的維護人員——如果想通過猜測——還可以通過在執行命令(3)之前運行如下命令代碼,下列代碼只為驗證哪些分支是有效的:
$ git branch -a
* master
 remotes/origin/HEAD -> origin/master
 remotes/origin/MOODLE_20_STABLE
 remotes/origin/MOODLE_21_STABLE
 remotes/origin/MOODLE_22_STABLE
 remotes/origin/MOODLE_23_STABLE
 remotes/origin/MOODLE_24_STABLE
 remotes/origin/MOODLE_25_STABLE
 remotes/origin/MOODLE_26_STABLE
 remotes/origin/MOODLE_27_STABLE
 remotes/origin/master
這將避免命令(3)所執行的分支不存在時發出的錯誤消息,如:
§ git checkout -b MOODLE_27_STABLE origin/MOODLE_27_STABLE

致命:Git检出:更新路径与切换后的分支不兼容。 你是否愿意检出'origin/MOODLE_27_STABLE',而其不能作为提交来解决?(<span style="background-color:#ff0000">Did you intend to checkout 'origin/MOODLE_27_STABLE' which can not be resolved as commit?</span>)

現在把新目錄mod/certificate/放到Moodle主克隆的忽略文件列表里是明智之舉,否則主克隆將會時刻提醒你檢測到新的代碼。
$ cd /path/to/your/moodle/
$ echo /mod/certificate/ >> .git/info/exclude
為更新Moodle安裝程序,必須要訪問Git資源庫並從上游拖拽變更事項。
$ cd /path/to/your/moodle/

$ git pull $ cd mod/certificate

$ git pull
在Moodle安裝根目錄編寫這幾行Shell腳本是非常好的主意。否則很容易忘記Git資源庫的Moodle庫的主要內容是什麼。

另請參閱

Moodle文檔
Moodle討論區的討論
額外資源