This means all bugfix development should take place on 3.1.x and will be merged into master. All feature development should take place in master. Read more about the workflow in the next section

How to contribute?

When fixing a bug, please post in the bug tracker. When adding a feature to 3.x post your patch for review in a new topic on the [3.x Discussion forum at area51]. Please either provide a link to your commit or branch on github or attach a patch created with git format-patch. For larger features or changes consider posting an RFC on area51 first.

Branch Names

Feature branches should be called feature/feature-name, bug or minor improvements do not need a name, their branches should be called ticket/1234 with the correct ticket id. If you want to give something a name that is not a feature you may use task/task-name. When these branches go into the main phpBB repository they are renamed <category>/<user>/<name-or-id> or user/<category>/<name-or-id> to make clear from which developer's repository the branch was merged.

Commit Messages

You should always create a ticket before starting work. It is important that every commit references a ticket. It does not matter what state that ticket is in. No line should contain more than 79 characters. The first line should be followed by a blank line. This means you should not break the first sentence of your message! The purpose of this is to maintain useful --oneline logs which only display the first line of every message. A good commit message then looks like this:

[branch you are working on] A short explanation of the change.
A more detailed explanation of which things exactly were changed and for
what reasons.
This can span multiple paragraphs for a bigger change. And
it should really make clear all the changes to anyone reading this commit
message without further context.
TICKET-ID

An example:

[feature/request-class] Adding request class ported from ascraeus-experiment.
The well known request_var function is now a wrapper that calls a method
on a phpbb_request object. The class provides additional functionality.
It can replace all super globals with special objects that throw errors
when being accessed. They still allow isset operations to keep backward
compatibility with isset($_POST['var']) checks. The phpbb_request class
implements the phpbb_request_interface which is available for easy mocking
of input in tests.
PHPBB3-1234

The structure of a commit message which is verified by the commit-msg hook is as follows:

[<branch>] <summary>
<description>
<ticket1>
<ticketn>

The required components are the summary, branch, and list of tickets; the description is optional.
Both the description and ticket list must be preceded by a _single_ empty line. The description element is unrestricted
length and may contain any number of empty lines to separate paragraphs; each ticket in the list
must be on its own line. If the branch is a [ticket/] branch, the ticket list must contain a matching
ticket, finally the ticket list may not contain any duplicates.

Developers

Developers should fork a copy of the repository on GitHub from [1] and then clone as instructed by GitHub. That should involve a command such as

git clone git@github.com:<my_github_name>/phpbb.git

so in preparation you'll need your own github account, then browse to the phpbb github repo, click the 'fork' button

Hooks

The phpBB repository contains some client-side hooks that can aid development. They are located in the git-tools/hooks directory. These hooks do things like preparing and validating commit messages, checking for PHP syntax errors. There is a script to set them up (which symlinks them into .git/hooks).

cd git-tools/hooks
./install

In case you get an error, stating the hooks already exist. Simply remove all files from .git/hooks and re-run the install script.

Creating local branches

To work on phpBB you need to create local branches of whichever develop branch (e.g. master) you need, issue the following command to perform this operation:

git checkout -b master origin/master

Workflows

Pulling in upstream changes

You will need to merge in changes made to the upstream repository for them to appear in your fork, the steps to do this follow. I'm assuming you are performing this on the master branch, but it could be a bug fix branch or a develop release branch, so ensure you are on the correct branch using git branch and change with git checkout if required.

Pull the changes from the upstream master branch:

git pull upstream master

Push the changes back to your fork (substitute master for the current branch):

git push origin master

The following image visualises the phpBB 3 branching model. It may help to understand the different branches this section refers to later.

Merging a feature or bugfix branch

Once a feature or bugfix is complete it can be merged back into the master branch. To preserve history we never fast forward such merges. In this example we will merge the bugfix created earlier into 3.1.x. We then merge the changes into 3.2.x and then merge 3.2.x into master to keep these branches up to date.

Additionally the merge.log config setting of Git is set to true, producing a summary of merged commits.

Merging into phpbb repository

This only applies to Development Team Members. The following steps should be taken when merging a topic branch into the phpbb repository.

Note that tests should be run prior to merging to the official repository. Tests are run for each push to a pull request by Travis (Continuous Integration) but it is a good idea to run them yourself as well. For more information, read Automated_Tests

Merging only to master

NOTE:upstream below is the remote pointing to the official phpbb repository, and origin points to your fork.

Before continuing, look at your commit list in your fork to make sure it looks correct. If unsure, ask.

git push upstream 3.0.x

git push upstream 3.1.x

git push upstream master

Merging to 3.1.x and master with different patches

(ALL merges to 3.1.x must also be merged to master!)

Patch author creates fix-3.1

Patch author merges his fix-3.1 into a fix-master branch

Patch author changes fix-master until it works as expected

Patch author sends 2 Pull Requests

Merger merges Authors fix-3.1 into his 3.1.x

Merger merges Authors fix-master into his master

Merger merges his 3.1.x into master (should work fast-forward)

Merger verifies the results

Merger pushes 3.1.x and master to phpbb

Merging to 3.0.x, 3.1.x and master with different patches

(ALL merges to 3.0.x must also be merged to 3.1.x and master!)

Patch author creates fix-3.0

Patch author merges his fix-3.0 into a fix-3.1 branch

Patch author changes fix-3.1 until it works as expected

Patch author merges his fix-3.1 into a fix-master branch

Patch author changes fix-master until it works as expected

Patch author sends 3 Pull Requests

Merger merges Authors fix-3.0 into his 3.0.x

Merger merges Authors fix-3.1 into his 3.1.x

Merger merges Authors fix-master into his master

Merger merges his 3.0.x into 3.1.x (should work fast-forward)

Merger merges his 3.1.x into master (should work fast-forward)

Merger verifies the results

Merger pushes 3.0.x, 3.1.x and master to phpbb

Windows

If you use git on windows you should disable the AutoCrlf which translates "\n" to "\r\n" automatically.

If you don't use TortoiseGit:
To do that you must use the following command:

git config core.autocrlf input

If you want to apply to all repositories you may use the --global option. Like this:

git config --global core.autocrlf input

The difference is that, if you don't use the global option, any new repository you create will not have this option properly set for phpBB development which may cause errors to occur while committing or when executing any php file.

NOTE: When you use TortoiseGit the first time, you need to disable AutoCrlf in Settings > Git > Config, so your line-ends are not changed from LF to CR-LF.
You also need to edit the local .git/config and add the following code, so you can correctly merge branches (you need to do that on every git repository you have):