FANDOM


CVS vs git (or hg) Edit

CVS

Dev A: initial code for Feature X
Dev A: fixed blah blah
Dev B: initial code for Feature Y
Dev A: implemented foobar()
Dev B: fixed blahblah bug
Dev B: implemented qaz()
Dev A: finalizing changes
<CVS tag for stable branch>
Dev B: blah blah
Dev A: missing features in Feature X
Dev B: Feature Y blah blah

The last 3 commits need to be merged manually to the stable branch. This is quite confusing
if the commits involve dozens or hundreds of modified files.


git

Dev A branch
============

Dev A: initial code for Feature X
Dev A: fixed blah blah
Dev A: implemented foobar()
Dev A: finalizing changes
Dev A: missing features in Feature X

Dev B branch
============
Dev B: initial code for Feature Y
Dev B: fixed blahblah bug
Dev B: implemented qaz()
Dev B: blah blah
Dev B: Feature Y blah blah

master branch
=============
Dev A: Feature X
Dev B: Feature Y
Dev A: Bug#1234: Fixes for Feature X
Dev B: Bug#2468: Fixes for Feature Y
Dev C: Feature Z

After the dev finishes his work on his private branch, a clean changeset (as opposed to set of files in CVS) can be
committed to the master branch. A merge squash is used to combine all changes into a single changeset.


stable branch
=============
Dev A: Feature X
Dev A: Bug#1234: Fixes for Feature X
Dev C: Feature Z

The builder can then decide which features are merged to the stable branch.