three months ago we decided to move PHP to Git. I want to give you
an update what happend so far and what we are working on.
So far we have:
1. A working import from php-src.
2. A basic server setup.
3. A working Karma implementation.
A little bit more details:
We will use y3.php.net as our git server. This server will run nginx
as a webserver. We will provide a web frontend using gitweb. You can
pull using HTTP and Git protocols. Pushs will be done usign HTTPS only.
You will use the same credentials that you used for SVN. A new Karma
implementation was written and will be tested within the next weeks.
The minimum required Git version for cloning using the Git protocol
will be 1.4.0. The minimum for pushing will be Git 220.127.116.11.
The migration will require some adjustements to the repository and
a proper migration of SVN properties. We also need to rewrite author
information on the repository. The Git Author information consists
of a name and a email address. Therefore we will rewrite the autor
information and use your stored Name and your firstname.lastname@example.org email
address as the new author information. For example:
SVN commit author | Git commit author
dsp | David Soria Parra <email@example.com>
gwynne | Gwynne Raskind <firstname.lastname@example.org>
IMPORTANT: If you do not like us to use the name stored in the master
DB for your account please let me know and we will change that.
About SVN properties: We will not use 'keywords' anymore, unless
a certain code needs it. I'm aware that code like reflection use
the keyword information in their phpinfo() text. Should we enable
keywords for this file or do we change the code?
With the transition to Git one of the main attributes of keywords
are gone. Git version nuimbers are not incremental so I don't see
much point in using them anymore.
SVN ignores will be converted to a .gitignore file.
TODO (What comes in mind atm):
1. Compile a list of scripts/sites that need to be changed in order
to work with the git repo. Some sites are already on the list:
2. Finish the setup of the y3.php.net server. We need to figure
out how to make http digest auth work nginx. We also need to
setup email hooks, etc.
3. Test the current karma implementation. More details will follow.
4. Setup github mirroring
Helping with the migration:
Help is always appreciated. There are differnet ways in helping.
One is preparing the listed sites (ci.qa.php.net) for the git
transition. Help with setting up the server is also much apprecaited.
Just drop me a mail if you have some time to help.
I hope to get the server and the migration ready for the end of this year
and probably do the switchover in the last week of december or the first
week of january, as I don't expect much commits during the holidays.
This will probably line up with the 5.4.0 release.
There was a lot of discussion if we can use github as our main
hosting platform. I spoke to github people and they said it's not
possible to implement the PHP Karma system on github without rewriting
major parts of github. Two solutions were discussed.
(1) Only a bot can merge changes into the main repository. All committers
will use pull requests. The bot checks for Karma. This approach will
substantially extend the roundtrip time commit <-> karma check and will
make every commiter wait a few seconds before he gets a status if he
is able to commit. We also would need to deal with failing automatic merges
and every developers needs to use the github GUI to create pull requests.
(2) Split the PHP repository into submodules accoriding to karma. This will
mean we will end up with dozents of submodules. This will split
commits apart. If you commit to ext/standard and Zend/ you will end
up with different 3 commits.
For me the overall conclusion is, that we take one step at a time and self host with
github mirroring, but feel free to discuss alternatives.
We will however support a direct mirror to github that makes it possible to use
discuss pull requests on github.com, and then merge them locally (which you should
anyway as you want to run the test suite before you push).
This is just a short version of what we did so far.