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/