代码

补丁和拉取请求是为 CakePHP 贡献代码的一种很棒的方式。拉取请求可以在 GitHub 中创建,是比附在问题报告的评论(ticket comments)中的补丁更受青睐的方式。

初始设置

在开始为 CakePHP 制作补丁之前,最好先把你的环境设置好。你需要下列软件:

  • Git
  • PHP 5.2.8 或更高版本
  • PHPUnit 3.5.10 或更高版本 (建议使用 3.7.38)
    设置你的用户信息,包括你的名字/账号和电子邮件:
  1. git config --global user.name 'Bob Barker'
  2. git config --global user.email 'bob.barker@example.com'

注解

如果你对 Git 完全陌生,我们强烈建议你阅读优秀且免费的ProGit 这本书。

从 GitHub 获得一份 CakePHP 源程序的克隆(clone)。

  • 如果你没有 GitHub 的账号,创建一个。
  • 点击Fork按键,复制(fork)一份CakePHP repository 的源码。
    你的复制完成后,从你的复制仓库(repository)克隆(clone)到你的本地机器:
  1. git clone git@github.com:你的账号/cakephp.git

把原始的 CakePHP 仓库添加为远程仓库(remote repository)。以后你会使用它来抓取CakePHP 仓库的改动,保持与 CakePHP 仓库一致:

  1. cd cakephp
  2. git remote add upstream git://github.com/cakephp/cakephp.git

现在你已经搭建好了 CakePHP 的环境。你应该能够定义一个 $test数据库连接,并且运行所有的测试

制作补丁

每次当你要修复一个臭虫(bug)、增加一个特性或做一个改进时,创建一个主题分支(topic branch)。

你创建的分支,应根据你的修复/改进所适用的版本。例如,如果你正在修复 2.3 版本中的一个臭虫,那么你就应当以 2.3 的分支为基础来创建你的分支。如果你做的改动是对当前的稳定版本的一个臭虫的修复,你就应当使用 master 分支。这样以后合并改动时就会简单多了:

  1. # fixing a bug on 2.3
  2. git fetch upstream
  3. git checkout -b ticket-1234 upstream/2.3

小技巧

作为一个良好的习惯,为你的分支起一个描述性的名称,可以引用问题跟踪报告或特性名称。例如 ticket-1234,超棒的特性

上述命令将创建基于上游(CakePHP)2.3分支的一个本地分支。进行你的臭虫修复工作,根据你的需要做任意多次的提交(commit)。不过你要牢记以下几点:

  • 遵循 编码规范
  • 添加一个测试用例来说明错误修复好了,或者新特性能够工作。
  • 使你的提交保持逻辑性,提交信息应当清晰、简洁。

提交拉取请求

一旦你的改动完成了,并且可以合并到 CakePHP 中去了,你就应当更新你的分支:

  1. git checkout 2.3
  2. git fetch upstream
  3. git merge upstream/2.3
  4. git checkout <branch_name>
  5. git rebase 2.3

这将抓取+合并自从你开始之后 CakePHP 中的任何改动。然后,它将衍合(rebase)— 或者说,在当前代码的基础上重新应用你的改动。在 衍合 过程中你可能会遇到冲突。如果衍合过早退出,你可以使用 git status 命令来查看哪些文件发生冲突/没有合并。解决每个冲突,然后继续衍合:

  1. git add <filename> # 针对每一个发生冲突的文件。
  2. git rebase --continue

检查所有的测试仍然通过。然后把你的分支推送(push)到你的复制(fork)仓库上:

  1. git push origin <branch-name>

一旦你的分支在 GitHub 上,你就可以在 GitHub 上提交拉取请求(pull request)。

选择你的改动会被合并到哪里

当提交拉取请求时,你应该确保你选择了正确的分支作为基础,因为拉取请求一经创建就无法更改。

  • 如果你的改动是一个 错误修正,并不引入新功能,只是纠正当前版本中现有的行为,则请选择 master 为合并目标。
  • 如果你的改动是一个 新特性 或者为框架新增的功能,那么你应选择下一个版本号对应的分支。例如,如果目前的稳定版本是 2.2.2,则接受新特性的分支将是 2.3
  • 如果你的改动打破(break)了现有的功能或 API,那么你就应当选择再下一个主要版本。例如,如果当前的版本是 2.2.2,那么下一次现有的功能可以被打破(broken)就是在 3.0 版本了,所以你应该针对这一分支。

注解

请记住,所有你贡献给 CakePHP 的代码将被置于 MIT 许可之下,Cake Software Foundation 将会成为任何贡献出去的代码的所有者。代码贡献者应当遵循CakePHP Community Guidelines

所有合并到维护分支中的臭虫修复,也将被核心团队定期地合并到即将发布的下一个版本。