Keywords: Source Control, Version Control, Source code, VCS, CVCS, DVCS, Tools
· Source Control (or version control)o
Source control (or version
control) is the practice of tracking and managing changes to code
o
Source control management
(SCM) systems provide a running history of code development and help to resolve
conflicts when merging contributions from multiple sources.
o
Whether you are writing a
simple application on your own or collaborating on a large software development
project as part of a team, source control is a vital component of the
development process
o
Source code management
systems allow you to track your code change, see a revision history for your
code, and revert to previous versions of a project when needed
o
With source code management
systems, you can collaborate on code with your team, isolate your work until it
is ready, and quickly trouble-shoot issues by identifying who made changes and
what the changes were
o
Source code management
systems help streamline the development process and provide a centralized
source for all your code.
o
Local Version Control
System (VCSs):
ü
Many people’s
version-control method of choice is to copy files into another directory
(perhaps a time-stamped directory, if they’re clever). This approach is very
common because it is so simple, but it is also incredibly error prone. It is
easy to forget which directory you’re in and accidentally write to the wrong
file or copy over files you don’t mean to.
ü
To deal with this issue,
programmers long ago developed local VCSs that had a simple database that kept
all the changes to files under revision control
o
Centralized Version Control
Systems (CVCSs)
ü
The next major issue that
people encounter is that they need to collaborate with developers on other
systems. To deal with this problem, Centralized Version Control Systems (CVCSs)
were developed
ü
These systems have a single
server that contains all the versioned files, and a number of clients that
check out files from that central place. For many years, this has been the
standard for version control.
ü
This setup offers many
advantages, especially over local VCSs. For example, everyone knows to a
certain degree what everyone else on the project is doing.
ü
Administrators have
fine-grained control over who can do what, and it’s far easier to administer a
CVCS than it is to deal with local databases on every client
ü
However, this setup also
has some serious downsides. The most obvious is the single point of failure
that the centralized server represents. If that server goes down for an hour,
then during that hour nobody can collaborate at all or save versioned changes
to anything they’re working on.
ü
If the hard disk the
central database is on becomes corrupted, and proper backups haven’t been kept,
you lose absolutely everything — the entire
history of the project except whatever single snapshots people happen to have
on their local machines.
ü
Local VCSs suffer from this
same problem — whenever
you have the entire history of the project in a single place, you risk losing
everything.
o
Distributed Version Control
Systems (DVCSs)
ü
In a DVCS clients don’t
just check out the latest snapshot of the files; rather, they fully mirror the
repository, including its full history. Thus, if any server dies, and these
systems were collaborating via that server, any of the client repositories can
be copied back up to the server to restore it. Every clone is really a full
backup of all the data
ü
Furthermore, many of these
systems deal pretty well with having several remote repositories they can work
with, so you can collaborate with different groups of people in different ways
simultaneously within the same project.
ü
This allows you to set up
several types of workflows that aren’t possible in centralized systems, such as
hierarchical models
ü
Local Version Control
System: GNU RCS
ü
Centralized Version Control
Systems: CVS, Microsoft TFVC, Subversion, Perforce and others
ü
Distributed Version Control
Systems: Git, Mercurial, Darcs and others
ü Version Control Hosting services: GitHub, Bitbucket, Azure Repos
and others