Trunk and Branch Management

A real-world discussion about trunk and branch management that I found through is reprinted here:

From: Rasmus Lerdorf
Subject: PHP 6
Groups: php.internals
Date: Thu Mar 11 12:22:48 2010

Ah, Jani went a little crazy today in his typical style to force a decision. The real decision is not whether to have a version 5.4 or not, it is all about solving the Unicode problem. The current effort has obviously stalled. We need to figure out how to get development back on track in a way that people can get on board. We knew the Unicode effort was hugely ambitious the way we approached it. There are other ways.

So I think Lukas and others are right, let’s move the PHP 6 trunk to a branch since we are still going to need a bunch of code from it and move development to trunk and start exploring lighter and more approachable ways to attack Unicode. We have a few already. Enhanced mbstring and ext/intl. Let’s see some good ideas around that and work on those in trunk. Other features necessarily need to play along with these in the same branch. I refuse to go down the path of a 5.4 branch and a separate Unicode branch again.

The main focus here needs to be to get everyone working in the same branch.


From this post, it seems that the required “Unicode effort” was underestimated, and continuing that effort on the trunk is causing issues with development of PHP. The proposed change will move the Unicode effort to a branch, allowing development for other components of PHP to continue on the trunk. Changes to the rest of PHP on the trunk can be pulled into the Unicode branch as the Unicode branch continues to be developed. The Unicode branch can be merged back into the trunk once it is matured sufficiently.

The words, “trunk” and “branch,” are used to label lines of development work. In general, a trunk can be considered simply another branch. Identifying a specific branch as the trunk helps developers visualize its relationship with other branches. For the PHP development project, the trunk appears to be the main code base that is being developed. A branch isolates development of a feature, so that any impact it has on the main development effort is minimized. The Usenet newsgroup post above is an interesting example of the importance placed by developers in distinguishing between development trunk and branches.

Questions, comments, and responses are welcomed and appreciated.

Leave a Reply