Wednesday, June 01, 2016

Resistance was futile: Git won

I consider myself a seasoned Subversion user.  Since at least 2005, when FreePascal migrated to SVN, i've been using it to manage my own projects or projects that i collaborate. It's not by chance that i bought not one, but two licenses from SmartSVN.

I'm also a adept of "If it ain't broke, don't fix it" philosophy so i did not bother to change the source code management software even with all the fuzz around Git. A system designed for distributed development would not improve over what Subversion offers for an "one man" work flow. Or so i thought.

With the time, i started to use Git to interact with a couple of GitHub hosted projects. Initially, just to fetch the code and, eventually, to send patches, or better, do pull requests. Following other teams work flows based in advanced branch management, i realized that Git could improve my software development efforts. So i bite the bullet, read a book and started to migrate my repositories.

And I do not regret, here are a few cases where Git made my life easier:


  • Save and share local modifications. There was times when i needed to test local, work in progress modifications in other environments before commiting. To do so, i had to keep moving a patch file around. Now i just create a temporary branch and push it, later delete it. No need to worry with HD crashes or messing with the main development line.
  • Sync a forked repository. In Subversion days, i had to manually sync the Lazarus VirtualTreeView fork. Only those that did a three way merge of 1MB of source code with heavy modifications knows how hard is. Now is a matter of doing a merge and resolving a few conflicts
  • Test different Lazarus package versions. When maintaining Lazarus packages in different branches, to switch between versions is necessary to load the respective file. With git no need to load a different file, just checkout the branch and recompile.
  • Develop alongside upstream projects. Some times there are changes that are not suitable to send upstream. Git makes easy to maintain personal changes at same time that tracks main development line. No need to bother upstream maintainers.