I am sure you have had tons of comparison between GIT, SVN and CVS. But they are generally a straight comparison of their technical bits, and do not discuss the criticality of migration issues. By migration I do not mean, the technical difficulties while migrating but rather the resistance against the Newton’s law of Inertia! If you are one of the managers, or are thinking of switching where your organization is closed and a clique, then this post if for you! If you have already faced the wrath of mundane programmers who do not more than write money sucking modules and do merges over CVS without considering the fact that there are *way* better tools with rather small learning curve then this post is for you( or if you are of that thought and looking for a good reason to do so )!
I am a rather inexperienced and came to intern to a very dynamic group of young devs. They have an issue that CVS performs badly with tagging, branching and merging is no piece of cake( who guessed as soon as I said CVS ? ). I was called upon to fix it. Me being a git user, took no hesitation in preaching out loud, only to face a series of blows which changed nothing about how I see git or other versioning systems, but give a taste of what real world can be like.
So this is my issues with the current development environment they have:
- They use CVS( lol )
- The merging is heavily based on tagging, which in CVS is specifically very bad
- Merging needs dedicated people to tell CVS not only which branches but also what all to merge!
- Their workflow is very adhoc,( the master is mostly broken )
- The history is next to useless, it is almost impossible to make out anything useful or grep out
- In short, they have a cribbed repository, just good enough for the bunch of guys who develop it( and hence do not crib about it )
But one thing that is remarkable here is, the company makes thick money, and the group of people I am talking about write the backbone code( they payment gateway ) so in no way can they be considered dumb. It is just that CVS just could not be smart enough for them( appreciate the sarcasm ? ). So I propose git to them, and give them the following reasons:
- Git allows your to work offline, with CVS or SVN it is not possible. Even a simple log command cribs for the server
- With the philosophy of Git branching, checkout, tagging is a flash. SVN is good with branching and tagging but with checkout it is slow( goes to the server for each file )
- Git being content addressable, can be checked for inconsistencies( they have had CVS corruption which I found out )
- There are great workflows which suite them completely and have been worked out great with Git, here.
- With facilities like interactive rebasing and interactive add, stashing etc, you do not need to make bulk commits or create un-necessary branches for each bug/feature
- Git is blazing fast with cloning too — it packes files and hence the transfer achieves connection speeds. With SVN and CVS there is no such tarring which makes it inherently slow over the wire
- Non-significant but git metadata is almost half that of CVS and SVN and there have been better reported results with Mozilla’s transition of SVN->GIT
But you need to realize that even Google uses Perforce which is a centralized server architecture and Microsoft uses something home-made. There is a lesson to be learnt –> Smarter is not always better. How much do you hate the extra smart geeky guy . Infact it won’t be an understatement that need of the hour is all that matters. So I was faced with the following issues which challenged my decision, they are not technical but related to the need of the migration:
- Most of the time developers work from within the office, so no real need to have git’s offline work capability
- SVN can do tagging and branching equally well, so how does it matter what we really use. Besides SVN has better UI tools like TortoiseSVN and integration with most IDEs.
- Will the devs really use stashing, rebasing or 3 way merge ?
- What about the learning curve.
If these same questions were asked in an open source organizations, I would not be surprised at the thrashing that would be happening on the thread . But for an organization all this *really* matters. At the end of the day, it’s a group of not-so-smart people basically developing code which is earning bucks for the manager, and no-body cares about the quality code than the quality of your turnover .