Monday, December 30, 2013

Work-Flows with Git and Visual Studio 2012-3

Dev work-flow with git.


Git Visual Studio 2012 Tools. Aligns Vs 2012 with the new git support in 2013. It doesn't require TFS to work.
If you don't like the new Team Explorer panel in Vs 2012 and 13, you probably won't enjoy the git integration either.  I personally find the user experience fiddly in such a small panel, and some functionality seems to be buried multiple clicks deep.  However the git integration is cleanly integrated into Vs, but I thought it weird several key features that should be at the forefront missing from the solution explorer panel. File history (log), compare, and revert are only available from Team Explorer.


TortoiseGit.
Basically a port of Svn Tortoise for git.  It feels familiar and stable. There doesn't look like there is any new innovation to set it apart from Svn Tortoise.

Git extensions. This is an open source alternative to Microsoft's offering above.  Also includes explorer integration and Visual Studio Integrations (2008,2010, 2012, 2013).  In my opinion this tool gives a superior user experience both in explorer and in Vs. There is a convenience toolbar in Vs, context menu items in solution explorer, and some thought has been put into surfacing frequently used features with an appropriate level of detail.
I do have to add however, it was problematic to install. First off, it defaults to install in C:\Program Files (x86), however some commandline utils required do not like the '(' and spaces in their path, so they don't work. But, even after changing the install location then 'git-credential-winstore.exe' failed to work at the custom location. It all feels a little difficult and unrefined to be honest.

GitHub for Windows
 This tool has a very nice looking user interface and its obvious considerable effort has been invested in creating a Windows 8 Modern UI.  It makes it very easy to create, view change sets, discover and commit changes.  However it seems to be missing commonly used features I'd expect to be there. For example being able to view the history on a single file; or a blame report; or comparing; or launching a Vs solution on double-click (or running the associated exe by extension), or specifying a custom folder for clone.  A nice UI but missing features that will stop me from using it.

Rather annoyingly it does not allow you to customise where it is installed so it ends up somewhere like this:
C:\Users\Ben\AppData\Local\Apps\2.0\Q7XE9020.PW7\T3LQDOXZ.R2W\gith..tion_317444273a93ac29_0001.0002_5f2f02fff55a2354\GitHub.exe
Nice. Thanks.
Too bad, if you have a SSD C: and want all non-essential apps on another disk.

What have I ended up with?

Rather shockingly no one tool seems to provide a feature complete, low friction, and modern user experience. I ended up using GitHub For Windows to clone a repository, and I have to customise the default path in global settings to get each repository located where I want them. Then using Git Extensions to do the every day stuff.

So why not command line?

Well, there are many command line utils out there, and they all are probably more reliable and complete than these graphical tools.  However, a command line interface is fine for a highly motivated and skilled developer, someone who is interested in command lines.  But, commndline interfaces have a steep learning curve, often involve lengthy command lines easily typed incorrectly, and they make visibility of available options difficult to discover.  Trying to teach a team of people a command line tool, when they are not interested in the tool, they just want to get their work done is very problematic. In my opinion apart from the enthusiast, they are inefficient for anything other than automation.