Я считаю, что Git, работая над целыми деревьями, извлекает меньшую выгоду от интеграции IDE, чем инструменты управления исходным кодом, которые основаны на файлах или следуют шаблону checkout-edit-commit. Конечно, есть случаи, когда было бы неплохо нажать на кнопку, чтобы провести какое-то изучение истории, но я не очень скучаю по этому.
Реально нужно сделать так, чтобы ваш файл .gitignore был полон вещей, которых не должно быть в общем хранилище. Мои обычно содержат (среди прочего) следующее:
*.vcproj.*.user
*.ncb
*.aps
*.suo
но это в значительной степени предвзято относится к C ++, практически не используя функциональность в стиле мастера классов.
Мой шаблон использования выглядит примерно так:
Код, код, код в Visual Studio.
Когда все в порядке (разумная промежуточная точка для фиксации кода, переключитесь на Git, внесите изменения и просмотрите различия. Если что-то явно не так, переключитесь обратно в Visual Studio и исправьте, в противном случае подтвердите.
Любое слияние, ветвление, перебазирование или другие интересные вещи SCM легко сделать в Git из командной строки. Visual Studio обычно довольно довольна тем, что происходит под ней, хотя иногда может потребоваться перезагрузить некоторые проекты, если вы значительно изменили файлы проекта.
Я считаю, что полезность Git перевешивает любые незначительные неудобства, связанные с отсутствием полной интеграции IDE, но это, в некоторой степени, дело вкуса.