Version control system
One fundamental tool in any software project is a Version Control System (VCS).
A VCS helps to keep track of features, bug tickets, and any other changes in our project. It is also very helpful to keep backed-up versions of our work just in case anything goes wrong.
Version control systems aim to solve a specific problem that programmers face: “storing and sharing multiple versions of code files.”
There are quite a lot of tools available to meet this requirement, including: Perforce, Mercurial, SVN, Git, CVS, etc. and they can be classified into two classes:
• Distributed VCS: Git, Mercurial.
• Centralized VCS: CVS, Perforce, SVN.
Centralized Vs Distributed :
Centralized VCSs keep the history of changes on a central server from which everyone requests the latest version of the work and pushes the latest changes to. This means that everyone sharing the server also shares everyone’s work. Sourceforge.net uses this type of versioning in their projects.
Distributed VCS, everyone has a local copy of the entire work’s history. This means that it is not necessary to be online to change revisions or add changes to the work. “Distributed” comes from the fact that there isn’t a central entity in charge of the work’s history, so that anyone can sync with any other team member. This helps avoid failure due to a crash of the central versioning server. Open source projects, such as Mozilla Firefox, tend to use this type of versioning.
Difference :
On one hand, a Centralized VCS allows more access control via folder permissions or by allowing checkout of just the needed sub tree from the repository tree. Also these systems are more prone to be backed up regularly, allowing for a more reliable environment of work. The quantity of development tools and Integrated Development Environments (IDEs) integrating with them is considerable.
On the other side, a Distributed VCS, like Git, is considerably faster and easier to work with when it comes to creating and merging branches and tags. Also, they allow for flexible workflows, tailored to one’s project and team needs.
However, both systems have room for improvement. Tools like SVN are slow when it comes to process transactions and working with tags and branches can be very tricky as well. Also, when someone on the team checks-in buggy code that takes down the project’s application, the whole team’s work is potentially affected since everyone has to have the same codebase.
However, a Distributed VCS, on the other hand, doesn’t allow for partial check out of the repository. Also, integration with many IDEs and other development tools (like file comparers) are not yet the rule nowadays and, since there are little repository managers with a Graphical User Interface for Distributed VCSs, it can be very hard in the beginning to be efficient and proficient with this type of Distributed VCSs.
Comments
Post a Comment