Acho que o Git, trabalhando em árvores inteiras, beneficia menos da integração do IDE do que as ferramentas de controle de origem que são baseadas em arquivos ou seguem um padrão de checkout-edição-confirmação. É claro que há casos em que pode ser bom clicar em um botão para fazer um exame de histórico, mas não sinto muita falta disso.
O real a fazer é deixar seu arquivo .gitignore cheio de coisas que não deveriam estar em um repositório compartilhado. As minas geralmente contêm (entre outras coisas) o seguinte:
*.vcproj.*.user
*.ncb
*.aps
*.suo
mas isso é fortemente influenciado por C ++ com pouco ou nenhum uso de qualquer funcionalidade de estilo de assistente de classe.
Meu padrão de uso é algo como o seguinte.
Código, código, código no Visual Studio.
Quando estiver feliz (ponto intermediário sensato para confirmar o código, mude para o Git, altere as etapas e revise as diferenças. Se algo estiver obviamente errado, volte para o Visual Studio e corrija; caso contrário, confirme.
Qualquer fusão, ramificação, rebase ou outro material sofisticado do SCM é fácil de fazer no Git no prompt de comando. O Visual Studio normalmente fica bastante satisfeito com as coisas que estão mudando, embora às vezes seja necessário recarregar alguns projetos se você tiver alterado os arquivos do projeto significativamente.
Acho que a utilidade do Git supera qualquer pequeno inconveniente de não ter uma integração total do IDE, mas é, até certo ponto, uma questão de gosto.