Git Flightgear Quickstart
git clone git://repo.or.cz/simgear.git cd simgear git checkout -b maint origin/maint
Repeat for Flightgear:
git clone git://repo.or.cz/flightgear.git cd flightgear git checkout -b maint origin/maint
Much has been written on the advantages of Git over CVS. For us, some advantages are:
- Much better support for branches and merging branches. This is especially important for creating bug-fix releases for major releases while still allowing work on the next major release to continue. It is also very nice for a developer's personal workflow.
- Easier path for contributors to submit changes and developers to integrate them;
- Much better support for everyday tasks like searching the project history for changes, viewing changes, bisecting the project history to find the original source of a bug.
Flightgear and Git
The repositories at repo.or.cz are experimental, but when we do switch to Git the real repositories will be set up similarly. For historical reasons there continue to be separate repositories for Simgear and Flightgear. There are 3 interesting branches in the repositories. Listed in order from least stable to most:
- next The current tip of new development. This branch should always compile and run, but various things could be broken.
- master The tip of stable, tested new features. If we were to make a new release today, we would start from the tip of this branch. New features that have been "cooking" in the next branch for a few days or weeks will be merged here.
- maint Bug fixes for the most recently released Flightgear. When a release is made from master, this branch is reset to it.
- cvs While we are still using CVS, this branch tracks the HEAD of the Simgear and Flightgear CVS repositories. It is not a real-time mirror of CVS, but reflects the state of the CVS repositories at the time that maint and next were last updated.
For now, almost every commit in next, master and maint are identical to commits in the CVS repositories, and the contents of next should be identical to those of CVS HEAD. You can verify this:
git diff origin/cvs..origin/next
should return nothing. The only commits that don't exist in CVS are those that set the version numbers of the maintenance releases because the maintenance releases don't exist as such in CVS.
Even though the contents of next are the same as CVS HEAD, its history is different. It includes many merges from maint and branches based on maint. This makes it easier to move new work from next back to master and maint after it has had time to cook.
This arrangement follows the scheme used by the Git maintainers. This description is very technical; you will surely have achieved git-fu if completely understand it. However, the idea of maintaining several branches of different stability is common in collaborative software projects.