管理员使用Git指导

跳转至: 导航, 搜索

此页描述了如何维护生产服务器上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讨论区的讨论
额外资源