# Moodle开发人员的CVS指南

> CVS的全称是 Concurrent Versioning System, 人们通常运用它在大型软件工程项目中管理源代码。CVS保存着所有文件的全部版本以确保任何数据都不会丢失，并且它对每个人的使用都做了跟踪记录。它还提供多种合并代码的方法以便两个或更多的人对同一份文件的操作。所有版本的代码存储到一个中央服务器中(Moodle的服务器位于Sourceforge)。

> 如果您仅仅是要用CVS下载Moodle来部署一个站点，那么也许您不需要阅读这个页面——只需遵循一个简单的CVS操作指导，它位于Moodle download page。

> 1. 以开发人员身份加入项目
> 2. CVS模块
> 3. 基本的CVS命令
>    3.1. Unix上的CVS
>    3.2. Windows上的CVS
> 4. 在分支上工作
>    4.1. 主干开发
>    4.2. 发行版的稳定分支
>    4.3. 大幅修改的特性分支

## 1. 以开发人员身份加入项目

> 假设您已经获得CVS的写入权限权并通过它来帮助我们开发和维护Moodle！欢迎登陆!

> 为了能把变动写入Moodle 的 CVS 档案库，首先你需要拥有一个 Sourceforge的帐户(注册是免费和简单的)。在这一页面的例子里, 让我们假设您的用户名为myusername，而您的密码是 mypassword。您需要阅读一下sourceforge关于创建您的CVS本地目录的特别指导——要激活任何一个新帐号的CVS功能，都必须这么做。简单地说，您需要使用ssh交互式地连接到cvs.sourceforge.net。

> 一旦您有了Sourceforge的帐户，联系Martin Dougiamas他可以设定你的帐户使你拥有写入特殊Moodle目录的权限。

> 为了避免每次运行CVS命令时都提示输入mypassword，可以参考Sourceforge 使用授权密钥的指导。这一步是可选的，但它可以使您使用CVS时感觉更好些。

> 做完这些后，您应该拥有了你所需要的权限，您只需要设置好你的机器和正确的下载源，然后您就可以开始工作了。

## 2. CVS模块

> Within CVS, the word "modules" refers to separate collections of code. In Moodle we have the following modules within our repository:

> 在CVS中，"模块"一词指的是不同的代码集。在Moodle中我们的代码库拥有下列模块：

> > moodle - 主要的Moodle源代码

> > contrib - 正在开发中的用户贡献的代码和其它配套代码

> > mysql - 一份定制过的phpMyAdmin，通过它可以让管理员直接管理Moolde的数据库

> > windows-cron - 使cron能运行在Windows系统上的小软件包

> > docs - 其它各种用户贡献的文档

> 很多人在为已有的moodle功能模块工作，但也有很多人在贡献新的想法，它们在contrib模块中。一旦contrib区域中的代码比较成熟了，它将被转移到moodle的主分支上。

## 3. 基本的CVS命令

> ### 3.1 Unix上的CVS

> > Sourceforge CVS使用ssh作为传送层来确保安全性，所以你必须在你的Unix Shell中设置一个CVS_RSH环境变量。最好把这些命令输入您的.bashrc或者.cshrc那么您将不需要每次使用的时候都输入它们：

> > setenv CVS_RSH ssh (用于csh、tcsh等)
> > export CVS_RSH=ssh (用于sh、bash等)

> > 接下来, 您可以通过以下命令(整个一行)来获取最新的Moodle开发版本:

> > cvs -z3 -d:ext:myusername@cvs.sourceforge.net:/cvsroot/moodle co moodle

> > 这个命令也可以用用于其它CVS模块：

> > cvs -z3 -d:ext:myusername@cvs.sourceforge.net:/cvsroot/moodle co contrib

> > 不要尝试在一个已安装的moodle目录中运行前一个CVS命令：在一个新建的目录使用它。

> > 注意在运行每个命令的时候，系统都将提示您输入mypassword，除非您设置好了授权密钥。

> > 现在您应该有了一个新的'moodle'目录。您可以按您的喜好来重命名或者移动它。进入这个目录：

> > cd moodle

> > 所有最新的Moodle文件都在这儿，您可以在这修改这些属于您的文件拷贝。比较您的文件和目录和服务器上的主要CVS拷贝请用cvs diff，即：

> > cvs diff -c config-dist.php
> > cvs diff -c lang

> > 从服务器获取最新的更新可以用:

> > cvs update -dP

> > 想把您的新编写的文件传回服务器您可以这么做:

> > cd lang/ca
> > cvs commit

> > 系统会提示您加入一些注释(使用您的文本编辑器)……加入一些有意义的注释然后关闭编辑器……这些文件将被送到Sourceforge保存起来。搞定！

> > To save more time you can put default arguments into a file called .cvsrc in your home directory. For example, mine contains:

> > 为了节省时间您可以把一些默认参数加入到一个叫做.cvsrc的文件，它位于您的主目录。比如，我的包含以下内容：

> > diff -c
> > update -dP

> > 试试用“cvs help”来获得更多细节信息……

> ### 3.2 Windows 上的 CVS

> > 首先, 您需要使用您的开发人员帐户下载一个最新的Moodle的完整拷贝.

> 1. 从tortoisecvs.org下载TortoiseCVS并且安装它，然后重启您的电脑。
> 2. 新建或者找一个新的目录来把 Moodle 下载到此处.
> 3. 右建单击这个目录然后从弹出的菜单中选择“CVS Checkout”您将看到一个对话框
> 4. 拷贝下列文字到CVSROOT栏区(使用您自己的用户名！)：

>         :ext:myusername@cvs.sourceforge.net:/cvsroot/moodle

> 5. 在“Module”栏区下输入“moodle”来获得最新的Moodle开发版本，“contrib”来获得贡献目录，或者“mysql”来获得MySQL管理员模块。
> 6. 按下“OK”键然后所有这一切将被下载下来。

> > 这时会有一个对话框提示您所有文件正在被下载，过一会儿您将拥有一个完整的Moodle拷贝。在首次检出代码后，您可以从CVS服务器获取最新的更新：

> 1. 右键单击您的Moodle目录(或者任意一个文件)然后选择“CVS Update”。
> 2. 坐下来看看那些滚动的日志，记下本地代码与新版本之间的冲突——您需要编辑这些文件和手工解决这些冲突。

> > 在修改完文件后(您可以注意到它们的图标从绿色变成红色！)，您可以把它们提交回CVS服务器就象这样：

> 1. 右键单击您的Moodle目录(或者任意文件)然后选择“CVS Commit...”。
> 2. 在对话框里输入一个您对这次提交的一个清晰的描述。
> 3. 点“OK”，您的提交将被发送到服务器。

## 4. 在分支上工作

> 这张图表展示了moodle主模块分支随时间演变为不同的版本。

> 为了看到现有的标签和有用的分支，在任意出现比较早的文件上使用这个命令(譬如在moodle目录顶层的index.php)：

> cvs status -v index.php

> 一些标签的准则：

> - 标签和分支的名字总是应该全部大写。
> - 标签和分支应该始终适用于整个模块(所有的模块)，不要只标记个别的文件和目录。
> - 我们不允许对标签进行重命名因为人们也许依赖于它们, 所以在第一时间就命好一个恰当的名字!

### 4.1 主干开发

> CVS主干是Moodle的主要开发版本，在CVS里它被称为HEAD，或者缺省分支。

> Moodle的开发者尽可能的保持它工作得稳定，但它通常包含一些新的代码所以可能有些bug和些小的不稳定的地方。

> 常常当我们认为这个产品有足够的特性去发行的时候，这个主干就加上名为MOODLE_XX_BETA的标签(如果我们想回溯当那一点)然后一个新的分支作为发行版而形成，称为MOODLE_XX_STABLE。

> 同时发布一个β测试包——一般是为了那些不使用CVS而希望测试最新的特性和报告bug的人。

### 4.2 发行版的稳定分支

> 当创建了稳定版的分支MOODLE_XX_STABLE后，开发将在两个方向上努力。一部分人将继续为下个版本在主干上开发新的特性，而大部分开发人员将专注于修正目前使用的稳定分支上所发现的bug。

> 您可以将您本地的Moodle拷贝转换为稳定版本，在Unix上于Moodle的根目录下执行下列命令：

> cvs update -dP -r MOODLE_XX_STABLE

> 在这之后，所有上述的命令都将在这个稳定版本上操作。要返回到主干版本请用：

> cvs update -dPA

> Windows的客户端会有一个能选择分支的菜单。

> 一旦新的稳定分支足够稳定了，就可以宣布发行。我们将会创建一个用于发布的软件包，并在此分支上做标记(通过Martin)，标记的名称为：MOODLE_XXX

> 周期性的，在稳定分支上修正的bug将被合并到主干中以使它们在未来的Moodle发行版中可用。一个叫做MOODLE_XX_MERGED的移动标签将被维持来记录最后的合并。合并的过程如下：

> 1. 获得最新的主干版本
>    cvs update -dPA
> 2. 合并所有上次合并后的分支进您的主干版本
>    cvs update -kk -j MOODLE_13_MERGED -j MOODLE_13_STABLE
> 3. 仔细观察所有的冲突日志, 并修复所有的冲突文件
> 4. 提交这个合并后的拷贝到 CVS 主干版本
>    cvs commit
> 5. 返回到分支版本
>    cvs update -dPr MOODLE_13_STABLE
> 6. 更新合并的移动标签以便下次重复这个过程
>    cvs tag -RF MOODLE_13_MERGED

> 最后，并非Moodle所有稳定分支的version.php文件中$version值都应当进行彻底更新(除了最后一位数也许需要)。原因在于如果某人从一个非常稳定的版本更新到另一个非常稳定的版本可能会错过在主干上的数据库升级。

### 4.3 大幅修改的特性分支

> 偶尔会有个非常大的的特性需要提交到服务器，且一些人从事与它相关的工作， 但它实在是太不稳定以至不能包括在主开发主干上。

> 在这种情况一个短期的分支将被建立用于实现这个特性，然后尽可能快的合并到主线上。MOODLE_14_WIDGET就是一个例子，在上面的图表上找到它的分支。

> 如果你需要做一些关于WIDGET的新特性，那么按照以下步骤：

> 1. 与其他开发人员进行讨论以确定它的比较性！
> 2. 在主干上(为所有的moodle)做一个名为MOODLE_XX_WIDGET_PRE的标记
>    cvs tag -R MOODLE_XX_WIDGET_PRE
> 3. 建一个名为MOODLE_XX_WIDGET的分支
>    cvs tag -Rb MOODLE_XX_WIDGET
> 4. 在那个分支上一直工作到新特性已经相当的稳定，如果需要就提交。
>    cvs commit
> 5. 当准备好后，合并所有分支入主干，修正冲突，提交到主干然后放弃这个分支。
>    cvs update -dPA
>    cvs update -kk -j MOODLE_XX_WIDGET
>    cvs commit

> 祝顺利，小心操作并享受它的乐趣吧！

Moodle文档

版本：$Id: cvs.html,v 1.2.2.2 2006/04/23 06:51:20 koenr Exp $