Yes others were ahead of me by a few years on this, but for some reason I never got around to fixing a major nuisance that has been bothering me. It has to do with using both SVN and Git.
I manage network of dozens of websites. Most are domains that I’ve developed over the years. Some are web dev customers’ sites. Some are very old, some are old-fashioned, some are trivial, some are quite involved, a few are modern, a few are old perl-script driven sites – an eclectic mix. Therein lies the problem.
When I work with others to develop a site, we make decisions quickly and one of those decisions is source control. The graphics diva I work with most pretty much refuses to do anything with a command line. It’s not a problem because if we use subversion there’s a gorgeous GIU client called Versions that is fully functional and drop-dead easy to use. If there are still any surviving graphics gurus out there using Windows, that would have been a mention for the not-so-beautiful but very usable TortoiseSVN client. Not an issue here, because subversion was where I learned version control.
But as time goes by more and more of the repos for these sites are git. That’s because the default preference for me for all new projects is git, and because I have occasionally switched repos, and if there’s not much maintenance activity I’ll usually switch it over, as the impact on people will be minimal.
OK you can probably see where I’m going with this eh? Because I’m an old-timer and know how to use SVn I never got around to using git even for those subversion repos. The answer that the rest of civilization already knew about is “git-svn” but I just never got around to it for whatever reasons. When I finally did, it was most anti-climactic! Basically for me, it boils down to a few simple items:
This guy takes minutes. That’s because it’s extracting the history from the svn repo, which those of you who know svn know is done one history at a time. Subversion goes through and recreates the current state of the repo from the initial state by applying all deltas, one by one. That’s just the nature of the RCS-CVS-SVN line of repos. Anyway, this is a one-time penalty you’ll pay.
This is basically your svn ci fro pushing your changes to the master repo. Like that last sentence? It has the git-svn flavor right? I feel like I’m (git) PUSHing the branch I (git) committed locally up to the (svn) central repo. But I’m still free to push it to a different git repo of course!
This is the svn update that lets me pull the changes my peers have committed (to the central repo – remember this is SVN repo) See the beauty here? I can keep the SVN repo and keep collaborators happy, and still get to choose to use git. Like I said, others knew this joy long ago, for some reason I never took the leap until recently.
And as a final aside, when is somebody gonna finally come up with a super-slick git UI? The non-programmers involved in projects don’t actually care what the underlying system is, they only care about how easy it is for them to use via a point and click interface.