Git/Conversion

This page discusses efforts to convert away from our current Subversion repository to Git, immediately affecting MediaWiki core and extensions used on Wikimedia sites. The current plan as of February 2012 is to do this by the end of March 2012.

Rationale
Our current Subversion-based version control system has served us well, but we're in need of a more suitable version control system for our development effort. Our community is very distributed, with many parallel efforts and needs to integrate many different feature efforts. After long consideration, we've decided to move from Subversion to Git.

Affected development projects

 * February 2012: MediaWiki Core
 * March 2012: MediaWiki extensions that WMF deploys
 * Afterwards: any other extensions, tools, or projects that wish to move

Some codebases we will leave in Subversion and not bother migrating, because those extensions or tools have been abandoned. Some developers will choose to move their projects to Github or some other git site.

December 2011

 * Prelim test conversions early in month [DONE, December 5ish]
 * Git workflow architecture review [DONE, December 19]
 * Agree on implementation strategies regarding remaining development process questions, e.g. how to handle multi-repo commits [DONE as of 1 Feb]

January 2012

 * CI tests && linting get run when a developer chooses to push to the stage between their branch and the mainline branch (see Ideal Workflow Document)

February 2012

 * Finish code review on trunk (progress at http://toolserver.org/~robla/crstats/ and MediaWiki 1.19/Revision report)
 * 2 weeks before migration of MediaWiki core, start communicating about cutover date -- give date & links to all the documentation with the 3 most frequently asked questions
 * techblog post
 * wikitech-l
 * mediawiki-l
 * add !gitconversion to mw-bot
 * Cut 1.19 release branch
 * Finish up specific Git management scripts / changes
 * to support WMF workflow
 * stage git-based tree on fenari
 * update documentation
 * i18n updates
 * Make Gerrit behave like we want it to -- TODO
 * Making permissions right
 * Making hooks correct
 * Will Gerrit work as repo browser, or only patch manager?
 * has built-in gitweb, but it's not pretty. But we can do things to make it nicer.
 * 1.19 release from SVN
 * 2 weeks before migration of MediaWiki extensions, start communicating about cutover date to extensions developers -- give date & links to all the documentation with the 3 most frequently asked questions (wikitech-l, mediawiki-l)

March 2012

 * Git migration -- CORE
 * Make trunk/phase3 r/o
 * change links on mediawiki.org
 * announce switchover again
 * do deauth of SVN as a pre-commit hook to output an informative error message in case someone tries to commit to MW core -- "Subversion is dead, we have moved to git, read Git conversion"
 * Git migration -- EXTENSIONS
 * Make trunk/extensions r/o
 * Git migration -- ANYTHING ELSE
 * Make paths r/o on case-by-case basis.
 * Ongoing, slow process.
 * Move towards git-based development and release process
 * First deployment from git mainline development branch
 * Move towards continuous integration via git, goalpost: weekly deployment
 * Jenkins (Testswarm/PHPUnit tests) on git branches

April 2012

 * First release from git mainline development branch
 * Is this a target for the conversion? Maybe shouldn't be on the roadmap...

Unscheduled items
Other cool things to do:
 * ❌ Write some documentation about git usage for our developers, existing page Subversion could be used as a starting point, and a list of useful links.
 * ❌ Convert the Bugzilla code to recognize the new SHA-1 commits.
 * ❌ Create database of SVN revision ids -> Git SHA-1's. Needed for redirecting CodeReview links and anything else that uses rXXXX to the new commit ID's.
 * Info is included in Git commits, just need to make a DB mapping of them.
 * ❌ Some ops stuff is being moved piecemeal to git to Mark Bergsma et al.

Split up and convert
A naïve  conversion of the entire repository (with branches) weighs in at around 7.8GB (November 2011). It makes no sense to make one Git MediaWiki repository, it should be split up.

In Subversion everything gets squashed into one giant repository. In Git repositories are split at the boundaries over which code does not cross.

Splitting
We have a test repository up, but in February 2012 will redo the split to create a permanent git repo.


 * MediaWiki will go in mediawiki/core.git
 * Extensions will go in mediawiki/extensions/foo.git
 * Two meta-repos, mediawiki/extensions-all.git and mediawiki/extensions-wmf.git will be repos using submodules to maintain "all" or "wmf" extensions.
 * Other things across SVN need to find new homes in Git

/Splitting tests

Converting

 * ✅ Every commit needs to be rewritten to give name/email pairs to SVN users. We are using username@users.mediawiki.org for a unified e-mail address scheme for all old commits.

Ideal state
This is what we'd love to see:

History

 * See history of MediaWiki version control

Working on the conversion

 * User:^demon

Would like to see it happen

 * 
 * Aryeh Gregor
 * Ashar Voultoiz (already use git locally)
 * Daniel Friesen
 * Gregory Varnum

Documents

 * User requirements:
 * Specifications: https://labsconsole.wikimedia.org/wiki/Gerrit_bugs_that_matter
 * Software design document:
 * Test plan:
 * Documentation plan:
 * User interface design docs: https://labsconsole.wikimedia.org/wiki/Gerrit_bugs_that_matter
 * Schedule: see Timeline above
 * Task management:
 * Release management plan:
 * Communications plan:
 * Status updates

Communications

 * draft plan
 * announcement of test repository
 * "git boot camp" from October 2011 NOLA hackathon GitBootcamp