PHP Documentation Project Transition from Subversion to Git

The PHP Documentation project and translations will be incrementally moved from Subversion to Git.

Current Project Structure

The Subversion repository for the PHP Documentation project is currently stored in the main PHP repository under phpdoc. It is divided into two main subsections, and a number of active and inactive translations.

Main Subsections
Translations
Properties

svn:externals Modules are achieved using the Subversion property known as svn:externals. This prop allows external Subversion paths to be linked into the project by URL.

doc-en Module Example

doc-base https://svn.php.net/repository/phpdoc/doc-base/trunk
en https://svn.php.net/repository/phpdoc/en/trunk

svn:keywords Each xml file in the repository contains a set of keywords which are automatically substituted when checked out. These allow certain terms to be automatically updated for each commit, rather than maintained manually. Importantly, the Revision keyword allows translations to track what version of the English translation their file is based upon.

svn:keywords Example

Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL

Proposed Git Structure

Because of a few technical limitations of the Git version control system, some major structural changes are required for the transition to Git from Subversion. First and foremost, Git does not support partial check-outs of a subsection of the repository. Because of this, the project must be split into several independent repositories, and “wrapper” repositories whose function is to define a set of submodules that make up each translation's project.

Doc-Base

Since the doc-base path of the PHP Documentation project is a global dependency for all builds, it makes up its own major project, which all wrapper repositories will include as a submodule.

"Wrapper" Repositories

Each wrapper repository will include doc-base and its respective translation project as submodules.

doc-en Wrapper Repository Example

git init phpdoc-en
git submodule add git://github.com/php/doc-base.git phpdoc-en/doc-base
git submodule add git://github.com/php/doc-en.git phpdoc-en/en
Attributes

Because Git does not support keywords in the same way that Subversion does, some changes may need to be made, or it may be necessary to create hackish dependencies in order to maintain the current scheme.

RCS Keywords Example

git clone git://github.com/turon/git-rcs-keywords.git
git init phpdoc-en
cat git-rcs-keywords/.gitconfig >> phpdoc-en/.git/config
echo '*.xml filter=rcs-keywords' >> phpdoc-en/.gitattributes
cp -R git-rcs-keywords/.git_filters phpdoc-en/