Gerrit/GitHub

The authoritative repository for nearly all Wikimedia projects is https://gerrit.wikimedia.org. It is where we conduct code review with gerrit software and trigger Continuous integration tests. There is some integration with the commercial service https://github.com.

Projects on GitHub...
Most Wikimedia projects are mirrored on GitHub under https://github.com/wikimedia (T37429), e.g.
 * the core MediaWiki software is mediawiki/core in gerrit, with a mirror wikimedia/mediawiki on GitHub.
 * the Flow extension is mediawiki/extensions/Flow in gerrit, with a mirror wikimedia/mediawiki-extensions-Flow on GitHub.

You can browse these projects on GitHub and even fork them.

... but not pull requests
Pull requests on GitHub will not turn into changes in gerrit for review. You can make them, but they will probably languish. You will have to create a gerrit change for review from your pull request, or ask someone else. It's possible to automate this and some code has been written, but more work is needed for bidirectional updates.

Setting up the GitHub triangular workflow
This is a guide on contributing to Wikimedia's Gerrit-hosted projects with a GitHub-based workflow. This guide is aimed mainly at Windows-based users that use GitHub for Windows (GitHub Desktop), but should also be usable for contributors who work from the console. However, for this last group, contributing using Gerrit/git-review is probably easier.

In this guide, I'm using the pywikibot-core repository as an example, but the same workflow can be applied to any repository hosted in WMF's Gerrit. The GitHub for Windows workflow has some issues (notably GHfW reporting an error while pushing).

The normal GitHub workflow is as follows:
 * 1) Clone from the original repository
 * 2) Push to your own repository
 * 3) Submit a pull request

We will set up this using GitHub for Windows:

Cloning the repository

 * 1) Go to https://github.com/wikimedia/pywikibot-core
 * 2) Click 'Clone in Desktop'

GitHub desktop will now launch, and clone pywikibot-core, including all submodules.

Forking the repository

 * 1) Go to https://github.com/wikimedia/pywikibot-core
 * 2) Click 'Fork'

A fork is now created under your GitHub username, e.g. https://github.com/wikimedia/pywikibot-core

Setting up push options
We now want to configure git to pull from the central repository (https://github.com/wikimedia/pywikibot-core) and to push to your own repository (https://github.com/ /pywikibot-core). For this, follow these steps:


 * 1) In GitHub for Windows, click tools » open a shell here
 * 2) In this shell, type these commands:
 * 3) git config remote.origin.pushurl https://github.com/ /pywikibot-core.git
 * 4) git config remote.origin.push +refs/heads/*:refs/heads/*

The first command configures your own GitHub repository as place to push, the second sets 'force push' as default - this will result in your fork to be always equal to what you have locally in GitHub for Windows.

Submitting a patch

 * 1) Make some changes
 * 2) In GitHub for Windows, click 'master' and type a branch name in the 'Filter or create new' field. Press Enter to create it.
 * 3) Select files to commit and press 'commit'
 * 4) Press 'publish'. Your changes are now pushed to your own repository on GitHub.
 * 5) Browse to https://github.com/wikimedia/pywikibot-core
 * 6) Under 'Your recently pushed branches' click 'Compare & pull request'
 * 7) Add a note, then click 'Send pull request'

Updating a patch

 * 1) Make some changes
 * 2) Commit to the relevant branch
 * 3) Click 'sync'
 * 4) If you get an error message, click tools » open a shell here, and run  'git push'. This should always succeed.
 * 5) The change is automatically added to your pull request