GitHub/Gecko Repositories

From MozillaWiki
Jump to: navigation, search

Gecko Repositories on GitHub

There are several repositories in the "mozilla" organization on GitHub that contain the Gecko source code, in particular mozilla/gecko-dev, mozilla/gecko-projects, and mozilla/gecko.

Generally, mozilla/gecko-dev and mozilla/gecko-projects are organization-supported mirrors using production synchronization, while mozilla/gecko is an unsupported mirror using best-effort synchronization. Issues with the gecko-dev and gecko-projects, such as bug 1350696 and bug 1362350, are a high priority for Mozilla, and are actively addressed. It isn't obvious how to report an issue with mozilla/gecko.


mozilla/gecko-dev is a read-only mirror of a variety of Mercurial repositories, including mozilla-central, aurora, beta, release, fx-team, inbound, ESR releases, and every branch that led to a published release. It includes the entire history of Gecko, including the history from CVS, before Mozilla migrated Gecko to its Mercurial repository (which doesn't include that history). It is maintained by Developer Services or Release Engineering and is synchronized automatically via a service multiple times per day.

No commits are made in Git on gecko-dev. All commits are made on So committer emails don't always match to GitHub accounts.


mozilla/gecko-projects is a read-only mirror of that is maintained and synchronized similarly to gecko-dev. It contains experimental work (mirrors of various repos) which are "reset" often, so they only show the most recent experiment. (Successful experiments are merged into mozilla-central.)

As with gecko-dev, no commits are made in Git on gecko-projects.


mozilla/gecko is a mirror of a single Mercurial repository, mozilla-central as well as CVS history (in the "cvs" branch, which can be attached to the "central" branch via git fetch origin 'refs/replace/*:refs/replace/*'). It doesn't include other Mercurial repositories (aurora, inbound, etc.). Its "central" branch is read-only, but Gecko developers are welcome to create and commit to other branches in the repo. It's maintained by Myk Melez and is synchronized manually via Git and git-cinnabar daily on weekdays and occasionally on weekends.

Myk created mozilla/gecko because he was synchronizing mozilla-central to a Git repo using git-cinnabar for his own development, and he thought it might be helpful for other developers who want to clone a Gecko repo that is smaller than gecko-dev and/or use git-cinnabar to interact with a Mercurial repo.

Integrating mozilla-central and CVS History

mozilla/gecko integrates the mozilla-central and CVS histories via Git replace. To traverse the combined history of those repos, clone/fetch mozilla/gecko, then fetch replacement refs via this command:

git fetch origin 'refs/replace/*:refs/replace/*'

(Replace "origin" with the name of your mozilla/gecko remote, if it differs.)

Then common Git commands (diff, log, bisect, etc.) will behave as if the oldest commit on the "central" branch (e18f9a3) is the newest commit on the "cvs" branch (3ec464b), and you can traverse history accordingly.

Note that the GitHub website doesn't support the replacement ref, presumably because it depends on libgit2, which doesn't support replacement refs per issue 1730. So you can't traverse the combined history of both branches transparently on the GitHub website.

Using mozilla/gecko With try/inbound

Note that cloning mozilla/gecko doesn't fetch git-cinnabar metadata, so you can't use it to push to Mercurial repositories like try and inbound unless you also fetch mozilla-central using git-cinnabar. Thus, for developers that need to push to such repos, it's better to clone mozilla-central via git-cinnabar directly (unless you need CVS history).

(This may change with git-cinnabar 0.5.0, which is in beta as of this writing.)