Continuous Integration Is More Than Version Control

Many, many people seem to equate ContinuousIntegration with CommitEarlyAndOften. While committing your code to the version control system is one example of integration, it's only the tail of the donkey.

Continuous Integration is making sure you don't create a mini-universe that ends up getting crushed by the real universe.

Examples of non-continuous integration: However

In the case of using head to stuff your partial refactorings, you may find that the refactoring goes wrong part-way through. You cannot simply roll-back the changes made, because intervening commits from other developers are likely already in the repository. You have to 'unwind' your changes manually when this happens. This is, for all intents and purposes, the equivalent of merging branches (in terms of workload involved). [Actually, if you're using darcs, you *can* simply rollback the changes (unless someone else edited the same lines after you did). It is still equivalent to merging. I think the same applies to any SensibleVersionControl?^W DistributedVersionControl system.]

Some personal experience relevant to this: Therefore, some of us do feel that large-scale refactorings do need to be done in a branch. It is felt that those doing the refactoring are responsible for periodically polling from the master branch to ensure that their codebase is up to date. By doing so, you are doing continuous integration. Then, when the branch is complete, the workload involved with merging branches is significantly reduced, and you have a consistent project head at all times. Use of a distributed version control system, such as Git, et. al., is strongly recommended to support this development practice.

Answer: commit all refactorings in steps that work. If this means you have a changeset that touches 500 files, so be it. If your changeset takes a week to develop, so be it. In this case, I back up my delta from source control regularly. This is not the same as branching as I am still fetching daily. --JoshuaHudson

See also ContinuousIntegrationPatterns, ContinuousIntegrationApplied, FrequentReleases, IncrementalIntegration, HorizontalStripes, AntHill, IntegrationGuard, ContinuousIntegrationIsMoreThanVersionControl

View edit of June 20, 2012 or FindPage with title or text search