HTML and CSS Reference
Some of these principles might seem alien, but will be fully covered in this
chapter. No project or development team is too large or too small to make use
of continuous integration.
This chapter begins by explaining what each of these continuous integration
elements are. You will then be given a practical exercise to show you how to
create unit tests, work with the SCM system Git, and finally deploy your
application to a production server using Capistrano.
Source Control Management
Source control management is at the heart of continuous integration. To date,
there are several SCM implementations, including the following:
SVN (Apache Subversion)
SCM provides a way to store versions of your source files. SCM does this by
storing the original file on the initial commit/save. SCM then stores only the
changes/differences between each file with every subsequent commit. This
saves on disk space and bandwidth, as the entire file isn't saved for every
commit, unless the file is new.
When you store projects using an SCM, they are still accessible from your
computer, just like any other file. The difference is that, with an SCM-based
project, you can commit any file changes (including images, videos, etc.) so that
they can be versioned and reverted back to or compared if needed.
To commit changes using an SCM, you need an SCM client such as Git or SVN.
SCM systems will also generally store additional files as part of your project.
Having used both Git and SVN, Git is my preferred SCM, as it stores only a
single .git folder in the root directory that can be deleted easily; in contrast,
SVN will store .svn folders in every folder of your project, which can prove to be
a pain to remove.
There are currently two types of SCM: centralized and distributed. Centralized
systems store all of the code on a central server. When a developer makes a
commit, the changes are merged on the server and not on the development
SVN is a centralized SCM system. Distributed systems have no central server.
Commits can be made on any developer's machine. If a developer wants to