Version Control Tools: Which should I choose?

Version Control Tools enable us to store and share files with other users, track changes in each revision of the file, and compare different versions of our data. Program developers, designers, and even writers today use version control tools to prevent loss of files and facilitate reverting to previous revisions. Nowadays, Subversion (SVN), an improved version of Concurrent Versions Systems (CVS), is the most widely used centralized version control tool. Distributed version control tools, such as Git and Mercurial, also offer a different workflow functionality to the single repository system of Subversion.

This article reviews the usability of some of the top open-source version control tools available today.

Centralized Version Control Tools

Concurrent Versions Systems (CVS)

Concurrent Versions System (CVS) is one of the oldest version control tools in the market. You may want to use CVS if any of the following is true for you:

  1. You share source code or documents with other people and you want multiple users to be able to edit or change the file at one time. CVS can help merge the changes from different users automatically.

  2. You save your source code or documents on more than one machine. When you edit your files, CVS can help you update the files in both of your machines.

  3. You have a slow Internet connection, and often make local copies of your files and edit them. CVS can help you prevent your files from getting out of sync.

  4. You would like to have a record of all the changes in your files and keep all revisions just in case you may need any of them.

CVS has been used for many years and is considered a mature technology. However, as it is now an older software, it lacks some of the functionalities offered by more current version control tools. For example, CVS is not capable of atomic operation support, which may potentially lead to source corruption. Moving or renaming files in CVS also does not include a version update, as it must be performed by manually modifying the repository files. There are also security risks from symbolic links to files, and branch operations of CVS are expensive, as CVS is not designed for long term branching.

Subversion (SVN)

Subversion is still the most widely used version control system. It was built initially as an alternative to CVS. It fixes some bugs in the CVS system while maintaining high compatibility with its workflow. SVN is released free as open-source software. Unlike CVS, SVN employs atomic operations which prevent corruption in the database. Either all of the changes made to the files are applied at once, or none of them are applied, so no partial commits can break the original source. Also, SVN offers cheaper branch operations and wide variety of plug-ins for integrated Development Environments (IDEs).

However, SVN still relies on having access to a centralized repository to perform many operations, unlike the peer-to-peer model adopted by some of the new distributed version control systems.

Distributed Version Control Tools

Git

Git was originally written by Linus Torvalds, the creator of Linux. The original concept for Git was to create a version control tool that is faster and based on a distributed system, unlike SVN or CVS. Git is equipped with a variety of tools that help users navigate the history and merge complex changes easily.

Git uses a distributed repository model. Hence, anyone in the team can have their own complete copy of a repository on their machine, and they are free to work offline if required. While this may have its benefits, some organizations prefer the additional centralized control offered by systems such as SVN and CVS. Also, Git is considerably more complex to understand than SVN or CVS and it has historically had limited Windows support compared to its excellent support in Linux.

Mercurial

Mercurial is very similar to Git, however its interface presents a much simpler system, which is is why it appeals to some developers. Developers will notice that Mercurial share some features with SVN. Thus, those who are familiar with SVN as version control tool learns Mercurial quickly. The documentation for Mercurial is also more complete and user-friendly, hence it facilitates the learning process.

Which Version Control Tools?

So which version control tool should you choose? If you are new to source control, have a small team or if you want a single master source tree, then SVN is the first system you should try. SVN is reliable and is easy to learn. If you are working with a large, distributed team, and you will be working at different times and will be submitting several updates to the code simultaneously, Git is a great choice. Git is fast and has an improved brnach management over centralized systems. If you are somewhere in the middle, or if you find the complexity of Git confusing, you can always try Mercurial.

All of these version control tools are freely available and fully functional (except perhaps for some of the limitations of CVS). So, consider the nature of your project and your team and choose the version control tool that suits your project best!

  0 COMMENTS
Continue Readingred arrow

Using Source Code Control For Your Project

Source Code Control is the process of using Version Control Software to manage computer program source code and other documents. It functions as a repository that saves your complete project, including all images, codes, files, and directories. It can record the entire history of your project, and allows you to track changes through the different versions of your files. It then enables you to compare your current document to any of its previous versions.

What can source code control do for your project?

If you are working with a series of files or directories, a source code control system can do several indispensable things for you.

  1. First of all, it can save the complete development history of your project. It tracks all the modifications and changes that were made to your files, while also recording the date when the file was changed, and who it was who made the changes.

  2. Secondly, source code control provides you with a more orderly way of keeping track of all changes through a revision numbering scheme, which indicates which version of a file is the most recent.

  3. Third, using source code control can help you undo changes to your files and retrieve past revisions. This is necessary should you decide that the current modifications are inappropriate, or if the changes have introduced new bugs to your system.

  4. Fourth, source code control can enable multiple users to work on a single file simultaneously, and assist with merging all the changes to the file. To do this, the users work on a local copy of the same code base. They can edit, break code, and fix bugs on their local copy, and when they are done, they can commit the changes back to the repository. The other users can then update their working copies based on the new version of the file.

  5. And finally, a source code control system also serves as a backup tool. If you accidentally deleted a file, you can always get the latest version from the repository.

What source code control can’t do for your project

Depending on the type of version control system you choose, there would be a number of limitations you have to deal with. One problem with most source code control software is that changes or modifications could be done to a file without noting why the change was applied. Source code control can’t stop this event, but it does prompt programmers to document changes when they commit them.

Also, when multiple users merge changes on a single file, conflicts may occur if different changes are applied to the same lines of text. Source code control can’t resolve the conflict on its own by choosing the correct modification, however it can identify it. The developers or users need to step in to resolve the conflict.

How do you know if you need to use source code control?

Source code control is an important tool in large, fast-changing projects with multiple users, or small projects with multiple source files. You may need to use source code control if you are a software developer working on program source code or a graphic artist working on images or illustrations. If you have files documenting various stages of a single file – for example, named logo-old, logo-new, logo-new2, and logo-final –  then you might need source code control to simply track the changes to your image or document.

You might also find it useful if you are managing collections of Word documents relating to a project. To save the Word documents, you probably use multiple storage devices for your backups. With source code control software, you can simply use the repository as your backup – not only will you take up less disk space, you can also enjoy the additional revision control tracking abilities of the version control software to boot!

In the book or magazine publishing industry, where many revisions of documents are made, source code control can help in managing the documents while keeping the latest version of the file readily available. Likewise, many web developers also find such systems useful for managing and deploying changes to .html and .css files.

  0 COMMENTS
Continue Readingred arrow

What is a Version Control System?

A Version Control System (VCS), also known as a Revision Control System, is software that manages changes to collections of files and directories. While a VCS is useful for managing changes to many types of files, this software is particularly useful for programmers to save files for the source code of computer programs. A VCS keeps track of all of the changes that occur in each revision of the file, the person who made the changes, and the reason behind the modification. Changes are usually identified by an incrementing number (also known as revision number) or letter code, and reflect the content of the files at a specific point in time.

Why is there a need to use a VCS when you can simply save the files in a different filename in one folder? Unlike your usual multiple file saving process, a VCS does not store the full copies of each revision. Instead, it stores only the changes that happen in each revision. That saves a lot of disk space, and also removes the need for the user to manage the naming of the revisions manually. Hence, a VCS is particularly useful for large, fast-changing projects with multiple authors who all need to track and coordinate all changes in each version.

Why should different versions of a file be tracked?

When the most recent version of the file is modified or corrupted, a VCS makes it easy to go back to the previous revision and start again. Also, programmers use the VCS to compare the different versions of their software. By comparing the different versions, they can determine when bugs were introduced and also when were they fixed. Any problems that may arise from a change may be addressed by reviewing the revision, noting who made the change, and the reason behind the change.

Tracking of different versions is also necessary in establishing precedence. Because a VCS keeps track of the person who made changes to the file, it can provide necessary data to solve a dispute regarding ownership of code or ideas.

Version control systems are especially useful for collaborative work. Multiple users can edit the files at one time, without affecting each other’s changes. When they have finished working with a file, they can then decide to merge their versions as one. When two users independently change the same part in a file, they are automatically flagged when the files are merged. Hence, they are still responsible for tracking if the final version is correct.

What are the different Version Control Systems available?

Version Control Systems can be provided using software installed in-house, or can be accessed via an online version control system provider. Online VCS systems also provide additional functionality, such as bug tracking, archiving, and user management. They are often used for projects that do not have the resources yet to maintain their own server for version control, and also for projects that wish to benefit from the ease of use and additional redundancy provided by an online system.

Concurrent Versioning System (CVS) used to be the most widely used version control system. However, Subversion and Git have long since overtaken it, and are now the most commonly used systems for open source projects. The basic capabilities of these systems in some ways are quite similar to CVS, but they offer much greater functionality.

How does a VCS work?

Some version control systems, like CVS and SVN, have centralized repositories. This works by setting up a single repository which acts as the central store of the system. The repository usually stores information in a hierarchy of files and directories. Check-outs and check-ins of files are done with reference to this central repository. Multiple clients can then connect to the repository and commit changes. Normally, they can only see the latest version of the files. However, they can also review the change history and restore previous versions using VCS tools.

Alternatively, in a distributed VCS like Git or Mercurial, many repositories may be used and no single repository is authoritative. Files can be checked out and checked into any repository. When a file is checked into a different repository, it is integrated as a merge or patch. The responsibility then falls on the users themselves to determine which repository is authoritative.

Ultimately, Version Control Systems have been widely studied and applied in the software engineering community for a long time. These systems are being continually developed and improved to best meet the needs of both small local teams and large distributed teams. A VCS is now considered an essential component of any modern software development process.

  0 COMMENTS
Continue Readingred arrow
Resources