系統管理員 GIT 指南

出自MoodleDocs
跳到:導覽、​搜尋

這個頁面用來描述如何在你安裝 Moodle 的伺服器上使用 GIT 來進行更新。

如果你自定製了 Moodle 的核心代碼,建議參考下面的指南:Moodle 開發快速 Git 指南

希望能夠比較熟練的使用 GIT,你需要熟悉一些概念,請參考下面的章節。

如果你從來沒有接觸過 GIT 或者你使用過其他版本的版本控制伺服器,例如 CVS 和 Subversion,這裏還是有點學習曲線的。

獲得 Git 命令行運行工具 (Windows, OSX, Linux 和其他類型作業系統)

Git 版本控制伺服器現在也越來越被廣泛的使用了,最常用的是在 Linux 伺服器上,但是目前 Git 也能夠被主流作業系統支持了:

當你在你使用的作業系統中下載和安裝好 Git 後,本頁面使用的 Git 命令行也應該能夠被正確使用。

從 Git 上獲得原始碼

這裏我們討論 GIT 的命令行工具,Git 的圖形化工具也基本上基於命令行,你應該比較容易的來獲得正確的安裝參數。

Moodle 的官方 Git 倉庫連結如下: git://git.moodle.org/moodle.git 同時 Moodle 官方也會將代碼推送到 github 中,你依然可以使用下面的連結git://github.com/moodle/moodle.git)。

使用下面的命令來初始化你本地的代碼:

$ git clone git://git.moodle.org/moodle.git                       (1)
$ cd moodle
$ git branch -a                                                   (2)
$ git branch --track MOODLE_25_STABLE origin/MOODLE_25_STABLE     (3)
$ git checkout MOODLE_25_STABLE                                   (4)
  • 命令 (1) 用來初始化一個新的本地倉庫,這個倉庫被用來克隆遠程的 Moodle Git 中保存的代碼。遠程倉庫也被稱為上游代碼或者默認被稱為原始代碼。這裏也同時會在你的當前路徑下新建一個名為 moodle 目錄,這個目錄被用來下載所有的文件。文件的下載過程可能比較長,因為 Git 在獲取 Moodle 的修改歷史和 Moodle 的所有歷史版本。
  • 命令 (2) 列出了所有可用的分支。
  • 使用命令 (3) 來創建一個新的本地分支,這個本地分支被稱為 MOODLE_25_STABLE 同時設置為與上游的 MOODLE_25_STABLE 分支同步。
  • 命令 (4) 將會切換到創建的本地分支。

注意:Git 的每一個命令將會有很多的參數,這些參數可以比上面介紹的參數更有效的工作。你可以通過參考 Git 的相關文檔來獲得相關的幫助信息。

Git 穿透防火牆

Git 使用只讀協議,這個有可能被你的防火牆所阻止。

Git 協議使用的端口是 9418。

如果你的機器中有這個問題,你可以使用 Github 的 http 方式進行下載 https://github.com/moodle/moodle.git。

這個方式下載可能速度比較慢,請儘量使用 Git 協議下載你的代碼。

更新你的 Moodle 安裝

Moodle 開發小組通常在每周的星期一和星期二提交整合和測試過的代碼。你可以在星期三的時候通過更新你的代碼來安裝所有的補丁。

查看修改日誌,可以通過下面的地址:http://git.moodle.org/gw?p=moodle.git;a=summary,這個地址中的內容顯示 Moodle 被更新了還是沒有。

為了將你的代碼更新到最新版本,你可以執行下面的命令:

$ cd /path/to/your/moodle/
$ git pull

如果你運行的 Moodle 站點是生產環境,你應該考慮使用 Moodle 的升級安裝,在安裝之前請備份數據庫。

Installing a contributed extension from its Git repository

This is one way to handle adding plugins from other Git repositories into your Moodle repository. Another way is to use Git Submodules. However, at the time of writing, this is one of Git's rougher features and should be regarded as an advanced option.

For example, let us say we want to install the Book module from its Git repository into our Moodle 2.2.

$ cd /path/to/your/moodle/
$ cd mod                                                          (1)
$ git clone git://github.com/skodak/moodle-mod_book.git book      (2)
$ cd book
$ git checkout -b MOODLE_22_STABLE origin/MOODLE_22_STABLE        (3)
$ git branch -d master                                            (4)

The command (1) changes the current directory into the mod folder of your local Moodle clone. The command (2) creates a new subdirectory book and makes a local clone of Petr Škoda's vanilla Book repository. The command (3) creates a new local branch that will track the remote branch with a Book version for Moodle 2.2. The command (4) deletes the master that was created automatically by git-clone in (2) as we do not want it in this production checkout.

Note: you should check first the compatibility of a module with your Moodle branch by asking directly to the Maintainer before cloning the repo or - if you want to guess it - by issueing the command below before running the command (3), in order to verify what is available among the branches:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/MOODLE_15_STABLE
  remotes/origin/MOODLE_17_STABLE
  remotes/origin/MOODLE_18_STABLE
  remotes/origin/MOODLE_19_STABLE
  remotes/origin/MOODLE_20_STABLE
  remotes/origin/MOODLE_21_STABLE
  remotes/origin/MOODLE_22_STABLE
  remotes/origin/master

This will avoid an error message when you issue the command (3) against a nonexistent branch, e.g.:

§ git checkout -b MOODLE_25_STABLE origin/MOODLE_25_STABLE
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/MOODLE_25_STABLE' which can not be resolved as commit?

In this case you should ask the Mantainer, here Petr Škoda, if master is the correct branch for Moodle 2.3+ and he will reply that the Book module has been already integrated in Moodle starting from 2.3 so there's no need to install it usit git. Please, as a general rule, before asking the Mantainer for something you should check the online documentation.

Now it is wise to put the new directory mod/book/ to the list of ignored files of the main Moodle clone, otherwise a status of the main clone will keep reminding you that the new code has not been checked in.

$ cd /path/to/your/moodle/
$ echo /mod/book/ >> .git/info/exclude

To update your Moodle installation now, you must visit both Git repositories and pull changes from upstream.

$ cd /path/to/your/moodle/
$ git pull
$ cd mod/book
$ git pull

Writing a shell script with these lines in the root of Moodle installation is a very good idea. Otherwise it is easy to forget what Git repositories are there within the main Moodle repository.

See also

Moodle Docs
Moodle forum discussions
External resources