Core migration to GIT: it's coming!

Categories: Development Created by Ernesto Baschny

If you have followed the core development in the last two years, and have been to the latest Developer Days, you might have noticed that we are for a long time already planning on migrating our TYPO3 core repository from Subversion to GIT.

Since the T3DD10 we have a core repository at github, kindly provided by Peter Niederlag. It is kept in Sync with our current SVN repository and could be used until now for trying out the "GIT way".

The plan

We will be migrating the TYPO3 core repository to GIT during the Code Sprint 2011 in Berlin (on some day between 28th February and 4th of March).

What does it mean?

  1. The core list as we know it will no longer be used for voting on patches (it might even be deactivated...). We will be using the Gerrit reviewing system (http://review.typo3.org) which will speed up our development and reviewing pace.
  2. We will have the external system extensions (dbal, extbase, fluid, linkvalidator, t3editor, workspaces, version) also migrated to GIT as separate projects at the same time. Those will be integrated into the core as Submodules, a feature from GIT similar to svn:external. This will ease the process of packaging a release.
  3. We will no longer manually maintain a "ChangeLog" file. This will be generated automatically before the releases, which eases up the process of merging bug fixes from one branch onto the other and minimize the conflicts.
  4. Third party extensions hosted on forge using SVN are not affected at first by this. There are no current plans on making git.typo3.org available to the "masses" of extension development on forge, but there are wishes to make it happen (at least on a "can have" basis, where the developer can opt to use git or svn when setting up their projects). But this is out of our scope currently.

Migration plan

We have a git task force, which is working on getting that done and trying to consider all implications. We are:

  • Karsten Dambekalns
  • Michael Stucki
  • Peter Niederlag
  • Xavier Perseguers
  • Ernesto Baschny

We already met twice to discuss the route. Yesterday we decided the further steps:

  1. During the next week Stucki, Karsten and Peter will start migrating our current SVN to git.typo3.org and integrating it with the Gerrit System in an environment which will be exactly like the "Live System" afterwards.
  2. The "Testing" can then begin, with patches being pushed to Gerrit, test-reviews being done, testing the whole work flow (e.g. also backporting fixes from trunk to 4-5, 4-4, etc).
  3. Meanwhile the "real work" will still be done in Subversion and through the core list as usual.
  4. We will then present the results and make a Q&A round during our Core Sprint in Berlin (28th February to 4th March). After having all details cleared:
  5. Refresh the projects on git.typo3.org with the current happenings from svn.typo3.org and have GIT + gerrit go LIVE for v4!
  6. Make svn.typo3.org "read-only" and keep it for a while for historical reasons...

Documentation

Our main current focus is getting the migration done and the work flow established. There is plenty of documentation on git already available (e.g. progit.org/book/) and we will constrain ourselves in documenting our specific work flow.

At least for the Live-Going we will have to update the documentation on typo3.org regarding "Contributing patches to the core" because of the new work flow.

We will update the current documentation available on Forge on using Git / Gerrit (already in use for FLOW3 / Phoenix), adapting it to our new TYPO3v4 work flow.

Issues / caveats

We are trying hard to cover all potential pitfalls, here are some (but not all):

  • We want to keep our current "SVN rev-ids" in the commit messages after migrating, because they can be useful to find historical fixes (e.g. when reading an issue in the bug tracker referring to "commited to rev. xyz"). For newer post-GIT commits they are not relevant anymore (because every commit will have a SHA-hash).
  • We will migrate from svn.typo3.org and not from the currently synchronized repository on github.org. This will lead to new SHA hashes for our history. This is not definitively decided and Peter feels that the amount of work to do either one of them is the same.
  • When migrating, we will include all current SVN branches and tags, so that they are available for research under GIT. While doing that we might rename some wrongly marked branches (like "TYPO3_3-6-0") or remove really obsolete and never used branches (like "indexed_search_refactoring").
  • During the migration, we will need to remove externally developed system extensions from our core, so that they can point to a remote repository (as a Submodule) after the migration. E.g. currently typo3/sysext/dbal/ is part of the core and is merged from time to time (before releases) from the external repository. We will "git rm typo3/sysext/dbal" and include a reference to the external Submodule instead, so that keeping up to date with "current trunk and all current trunk of all external projects" will turn out to be much easier in future.