Git vs Subversion: A Management View of Version Control
We all know that the version control system (VCS) a development team uses impacts efficiency and workflow. From a management standpoint, however, it’s also important to know whether a VCS supports your business requirements. The decision to use a centralized or distributed VCS should accommodate both corporate and technical requirements. Consider the following example scenarios:
- Your business model involves custom versions of core product for different industries/customers. Developers essentially work on parallel code trees, but they must also keep current with core releases. Distributed version control lets developers work independently on different branches and also contribute fixes to core back up the tree.
- You are supporting an open source project. Contributors work independently, deadlines are loose and at some point, the project team delivers a release. There’s no doubt that a distributed version control system simplifies this workflow.
- You must guarantee a single, protected master copy of your software. Commercial software companies tend to be very careful about the security of “the official version”. It’s their most valuable company asset. Centralized version control maintains one repository and all code that’s checked in, by definition, gets checked into the single repository.
- You must comply with corporate or external governance requirements. Auditors usually want proof of reliable process and security; these can include users, file accesses, access dates, data locations, and checkin-checkout procedures. The Sarbanes-Oxley Act, HIPAA (Health Insurance Portability and Accountability Act), and regulations have resulted in many version control systems making it easier to meet compliance by logging more data and strengthening access controls. But there’s no doubt that regulators are happier with centralized control.
All version control systems address a basic set of requirements: store all versions of your code; allow many developers to work on the same files and contribute toward a consolidated “release”; recover a useful set of file versions that correspond to a release.
Git and Subversion (SVN) are two version control systems popular in WordPress and Drupal development communities. We have experience with both, and put together a table which highlights the differences between them.
|
Git |
SVN |
---|---|---|
Support for centralized workflow |
Yes. Just designate one repository as the ‘central’ repository. However, all contributors need to cooperate and consciously follow the workflow. |
Yes. Created for centralized control; complete history maintained on central repository. There is no option. |
Support for distributed workflow |
Designed to be fully distributed peer-to-peer; users work from local full copies of repository. Users inherently have commit access and version control to their own work on local repos; the repo owner has source control |
No. Sort of. OK, no. Users need commit access to central repo, control is centralized. |
Support for branching |
Branching is a given; every user’s working directory is a branch stemming from a common base Branches are easy to create and delete; almost on-the-fly easy Potential to lose track of resources spent on code that doesn’t get used |
Branches and tags are copies, therefore merging multiple branches, or cross-merging between branches can be cumbersome. Cumbersome although some tools can make it easier. SVN works best for VC of straight line development projects |
Performance |
Fast. No network latency since commits can be local. Very small repository sizes, good compression Must download entire repository to work clone/checkout Much faster since users can commit locally |
Slower, network-dependent commits to central repo each time Up to 30x more space needed because working directories contain two copies of each file (one for the user, one for VC operations) Can check out just a branch. |
Merging |
Strong merging algorithms make branch merging simple and error-free. |
Must keep track of last revision merged from to avoid mistakes. |
User interface, tools |
Primarily command line; there are a couple of shell extensions including Sourcetree.7 Command line interface makes this less friendly to learn and use. Also check out TortoiseGit |
Mature set of UI options and tools developed over the years. CollabNet and Apache have packaged distributions of Subversion that come with tools and user-friendly clients. Easier to use. Plus, SVN has been around longer which means more people are familiar with it. |
Remember also that your development environment, especially if you have remote or virtual team members, needs to be supported by a fast and secure network. When developers complain that commits, checkins, and checkouts slow down productivity, there is a tendency to blame the VCS when it’s actually bandwidth. A system audit will identify the real resource issues.
Your version control system decision needs to take into consideration not just your development practices, but also your internal security policies, external compliance or governance obligations, and the type of software projects you’re running.