Git tooling for .NET developers

Many developers working on Windows stay away from Git. There are many reasons for this but from my observations and discussions I’ve had, the most common can be summarized by this tweet by my friend Paul Stovell:

 

can everyone please stop using Git? Mercurial has a better UI (TortoiseHG), I'm sick of Git UI's

I’m not getting into holy wars, and I’m not trying to convince anyone that Git is better than any other VCS. Instead I’ll walk you through the tooling I use to interact with Git on Windows, with Visual Studio.

Git Extensions

First thing you should be getting is Git Extensions.

Git Extensions context menu

With that, similar to TortoiseX family of tools you get nice context menu that gives you access to most common operations quickly, via GUI, and with no need to memorize command line options if you want to avoid it. You can also launch Git command line in the selected folder and then all power of git is at your disposal.

Visual Studio

If you’re a .NET developer, you’ll want to work from within Visual Studio. I’m sure you’ll be happy to learn that Git Extensions has a really nice Visual Studio integration as well.

git_extensions_visual_studio

You get two things – a menu with all the options that Explorer context menu gives you and more, including ability to edit .gitignore file (also the tool will generate a new .gitignore file for you with Visual Studio specific rules!) and to launch a Git bash. Also you get a Git toolbar with most commonly used commands: Commit, browse, push, pull, stash and access to settings.

The way I usually work with it, is I use Git bash for most operations. There’s one exception to that rule though – committing.

git_extensions_commit_window

I think Git Extensions’s Commit window is the best of all VCS I’ve worked with. It clearly separates files you want to commit (in your Index) and files you leave out for now. It clearly shows you status of each file (new, deleted, modified) with distinctive, large icons, also it shows you an on-the-fly diff of what changed in any given file, and it’s blazing fast. Mostly the readability benefits are why I stick to the UI for this operation.

Visual Studio Git Source Control Provider

In addition to Git Extensions I use another tool called Git Source Control Provider which plugs into standard Visual Studio VCS provider mechanism to give me some additional functionality (you can get the tool via Visual Studio extension manager).

git_source_control_provider

There are a few useful capabilities provided by this tool that I tend to rely on quite often (there are more than that as you can read on the tool’s page):

  1. Overlay icons showing you status of each file in Solution Explorer.
  2. It shows you name of the current branch in the Solution Explorer bar at the top (see “(master)” on the screenshot below), and you will work a lot with branches in Git.
  3. It gives some additional options in the context menu.

git_source_control_provider_screenshot

This (plus command line) makes the job very, very simple and quick, and that’s what I stick to on my machine.

There’s one more thing that makes working with Git a pleasure (especially if you’re working on a team that’s not completely co-located).

Github

I love Github. It has a very clean, simple interface that makes going through project history, diffing commits and code reviews a very simple and frictionless process.

 

Summary

Yes, perhaps those tools lack some eye candy that other tools have but frankly – I don’t care, and neither should you. They are more than enough to let you quickly do whatever you need to do with your code and don’t stand in your way. And that’s what a good VCS and tooling around it should be – something you don’t really have to think about and you can rely on to keep track of what is happening with your code with confidence. And that’s precisely what Git is – so if you’ve been held back, go ahead, install those tools and give Git a shot – you won’t look back.


Posted 01-26-2011 6:26 AM by Krzysztof Koźmic

[Advertisement]

Comments

nancy wrote re: Git tooling for .NET developers
on 01-26-2011 4:26 AM

Great post! I was just wondering about this the other day.

Pawel wrote re: Git tooling for .NET developers
on 01-26-2011 4:35 AM

Dzięki serdeczne. Szukałem takiego podsumowania. Pozdrawiam

Nathan Evans wrote re: Git tooling for .NET developers
on 01-26-2011 4:41 AM

Judging from what those screenshots show, the UI actually looks more polished than TortoiseHg. And I should know as I use TortoiseHg every day!

Also VisualHG is the only thing comparable to GitExtensions for VS and it is a piece of crap. The only good thing it does it offer file status icons on the Solution Explorer.

GC wrote re: Git tooling for .NET developers
on 01-26-2011 9:35 AM

Been using SmartGit recently. Works pretty good for me.

Christopher Bennage wrote re: Git tooling for .NET developers
on 01-26-2011 9:46 AM

I made a commitment to give the commandline a try. I've been doing so for at least six months. Specifically, I use PowerShell though admittedly I call 'git gui' a lot for commits. Nonetheless, I don't feel hindered by the lack of UI.

mob wrote re: Git tooling for .NET developers
on 01-26-2011 11:09 AM

I agree with Christopher's comment as well. Thought I'd miss the gui tooling that I had with SVN. Forced myself to first use the bash shell for git and I've never looked back. I think its really a matter of perception for most folks who primarily use gui tools. I would give the cli a try first then start thinking about gui tools later, you may be surprised.

Adam wrote re: Git tooling for .NET developers
on 01-27-2011 5:38 AM

Nathan,

"Also VisualHG is the only thing comparable to GitExtensions for VS and it is a piece of crap"

If you have not tried HgSccPackage then I would recommend it. It's an excellent Source control plugin for VS and is much better than git extensions.

www.newsupaplex.pp.ru/hgscc_news_eng.html

David Hayward wrote re: Git tooling for .NET developers
on 01-27-2011 1:03 PM

The only problem I have with both SmartGit and Git Extensions is that they don't seem to handle the more 'git interactive' parts, like staging single lines or lines from different hunks. I couldn't see any way to do this in SmartGit. Git Extensions does have this functionality, but it doesn't always work correctly. For example I was trying to stage and commit just two lines before committing the rest, but it wouldn't let me do that; it just refreshed the view and left them unstaged. In another file it let me stage a bunch of lines this way, then failed to stage a bunch more, and actually staged the whole file which isn't what I wanted to do.

If they could get that sorted out then I'd be a happy camper and would have trouble choosing between the two, although I like Git Extensions a bit more.

Dean wrote re: Git tooling for .NET developers
on 01-27-2011 6:07 PM
Alberto León wrote re: Git tooling for .NET developers
on 01-28-2011 3:36 AM

Nice post. I hope you write more about Git and VisualStudio. I feel confused with branch graphical information.

Graveen wrote re: Git tooling for .NET developers
on 01-28-2011 4:59 AM

SharpDevelop has a native Git integration. And TortoiseGIT is as interesting as TortoiseHG.

This is not an holy war. This is simply Subversion and Git are widely used for OSS, so a dev will meet them often on his way. And Git can read SVN repositories, for me it was very clear what VCS to learn and use ;)

BinhVu wrote re: Git tooling for .NET developers
on 01-28-2011 6:03 AM

I'm using tortoise for GIT. It's awesome. Very similar to tortoise with SVN.

Rogger wrote re: Git tooling for .NET developers
on 01-28-2011 6:53 AM

Mercuial with TortoiseHD is awesome!

Randall Kent wrote re: Git tooling for .NET developers
on 01-28-2011 8:55 AM

Great overview!

Andrew wrote re: Git tooling for .NET developers
on 01-28-2011 11:16 AM

I love git. However, not everyone on my team "gets" it. They find Mercurial with TortoiseHG to be "easier to use". It does a nice job of showing you in Windows Explorer what files are changed locally. And the integration in Solution Explorer is easier for them to understand.

So we went with what they found to be easier. (We have one dev who won't use anything but git on his project... so I find myself using both)

Pablo E wrote re: Git tooling for .NET developers
on 01-28-2011 11:31 AM

Frankly I'm sick of GIT altogether -UI or not.  I just want to develop my code and I really don't want to worry the complexities of git.  I use git and svn on major projects with many developers, and I don't buy the git hype at all.  It is awesome for trivial projects, but a real headache otherwise.

Kevin wrote re: Git tooling for .NET developers
on 01-28-2011 1:21 PM

What's wrong with using the command line? ;-)

Jason P Sage wrote re: Git tooling for .NET developers
on 01-28-2011 2:56 PM

I too, not to detract from the article or another awesome tool for versioning... I just originally was using GIT GUI and the tortoise thing... and I use linux a lot so - command line was what I used there - and when I got the hang of GIT... I found like 3 or four staple commands I use on the regular... I usually can jump to a shell prompt and do what I need and be done before a gui loads... (exaggerated slightly) but more icons and short cuts to cmd than the one gui app is another thing.. and really:

git add .

git commit -m "Almost done with bug 200 - just log file bit to clean up" .

git push .

git add

git commit

git push

Usual commands for me when I am concentrating on development - and not wishing to be weighed down about thinking "Version Control" - it's "rote"

Blog J.Schweiss wrote Thinking about revision control
on 01-29-2011 2:08 AM

Thinking about revision control

Dennis Sellinger wrote re: Git tooling for .NET developers
on 01-29-2011 3:46 AM

This is an interesting discussion but it lacks the point of view of people not working with git.. So here's my two bits worth.  I don't pretend to understand git usage patterns and I don't want to start any SCM wars.

For our development team (exclusively on windows) I can make the following comments on how we work.

1. Although our SCM has a cli, we use it only for (rare) administrative operations, even though our builds are all done from cli not in VS.  Why is this?

2. When developing, the SCM should not get in the way.  Check-out and add new files should require as little interaction with the SCM as possible (like none for example).

3. Commits are a different matter.  When we commit it is typically associated with finishing a task defined in the project management system, so we can't just throw a bunch of files into the SCM.  And the comment has to explain fundamentally the intent of the code change.  To do this in one line from a cli seems to me to be a bit of a pain.   So I prefer a good GUI for my commits (we usually use a standalone SCM gui for commiting our code).

4. For us, branching is part of release management, so again it is done carefully.  We have to ensure that we can always rebuild the entire product in question from a branch, thus branching must be carefully planned and validated.  Again we use a standalone SCM tool for creating branches.

5. There are other operations that I find easier to manage from a gui - for example, cross-branch merging and conflict resolution.   These operations are not performed everyday, but they are the things that make the difference when selecting the SCM.

So, while the discussion above is good, as a non-git user I can not really tell if the VS integration discussed here would meet my needs.

btw.  I have used cli in SCCS, RCS and CSV, so I am not unfamiliar with cli's (but I don't really want to go there)

Pete Miller wrote re: Git tooling for .NET developers
on 01-29-2011 7:57 AM

I do find the adoption of Mercurial suprising given the coparison of the tools available for git and mercirual. In my experience, working daily with large Git and Mercurial repositories (>10k commits and >100k working dir files), TortoiseHg is slow to show details of each commit ('Running...' is a frequent status update!) whereas Git Extensions is more realtime.

My day to day in both is to use command line for push, pull, merge and branch operations and a GUI for staging and commiting files (git-gui for git, and TortoiseHG for mercurial), and for browsing history.

I use Git Extensions more for it's visualisation of commit and branch history (an essential part of any operation to do with historical changes), much the same as Tortoise HG, except that it doesn't look like it was coded in the 1980s, and its a lot faster :-).

Plus, Git Extensions is written in .Net and is open source - github.com/.../gitextensions.

Threshold Design wrote re: Git tooling for .NET developers
on 01-29-2011 8:46 AM

I have used GIT for one of my projects, this is great news!

The only complaint I have about GIT is the lack of good easy to understand documentation and tutorials for new users.

The manual is not written for new users. The manual has a lot of detailed information on features and functionallity, but is very weak from the "getting started" perspective.

Krzysztof Koźmic wrote re: Git tooling for .NET developers
on 01-29-2011 7:38 PM

@Threshold Design

try http://book.git-scm.com/

it's the best, most approachable guide to Git I've found

Daniel Hoelbling wrote re: Git tooling for .NET developers
on 02-04-2011 4:26 AM

Also note that once you learn how to properly use git from the shell (I use Powershell with posh-git for this) you'll never go back to a gui tool at all.

Even though the gui tools may still lack some polish, the git commandline makes that up in usability.

Just don't be afraid to use your keyboard..

Ian Pettman wrote re: Git tooling for .NET developers
on 07-29-2011 10:33 AM

We adopted GIT about a year ago. We now use the Smart GIT GUI which really suits us. At the time we adpoted GIT an experienced GIT guy (Jeremy Skinner) talked us through the (Windows) command line. We recorded it split it into manageble chunks and have just posted the video on Youtube.  A menu for them all is on our web site http://www.ava.co.uk/git - they helped us and I hope they can help you

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Subscribe
Google Reader or Homepage

del.icio.us CodeBetter.com Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl CodeBetter.com Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of Devlicio.us
Red-Gate Tools For SQL and .NET

NDepend

SlickEdit
 
SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
LiteAccounting.Com
DevExpress
Fixx
NHibernate Profiler
Unfuddle
Balsamiq Mockups
Scrumy
JetBrains - ReSharper
Umbraco
NServiceBus
RavenDb
Web Sequence Diagrams
Ducksboard<-- NEW Friend!

 



Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers

 

Community Server (Commercial Edition)