Als lange tijd Visual SourceSafe gebruiker (en hater) was ik met een collega aan het discussiëren over het overstappen naar SVN; hij stelde voor om in plaats daarvan Git te gebruiken. Omdat, blijkbaar, het gebruikt kan worden als peer-to-peer zonder een centrale server (we zijn een 3-developer team).
Ik heb echter niets kunnen vinden over tools die Git integreren met Visual Studio - bestaat zoiets?
Wat zijn de beschikbare technologieën voor het gebruik van Git met Visual Studio? En wat moet ik weten over hoe ze verschillen voordat ik eraan begin?
In januari 2013 heeft Microsoft aangekondigd dat zij volledige Git ondersteuning toevoegen aan al hun ALM producten. Zij hebben een plugin gepubliceerd voor Visual Studio 2012 die Git source control integratie toevoegt.
Als alternatief is er een project genaamd Git Extensions dat add-ins bevat voor Visual Studio 2005, 2008, 2010 en 2012, evenals Windows Explorer integratie. Het wordt regelmatig bijgewerkt en ik heb het op een paar projecten gebruikt en vond het zeer nuttig.
Een andere optie is Git Source Control Provider.
Ik gebruik Git met Visual Studio voor mijn port van Protocol Buffers naar C#. Ik gebruik de GUI niet - ik hou gewoon een opdrachtregel open en ook Visual Studio.
Voor het grootste deel werkt het prima - het enige probleem is wanneer je een bestand wilt hernoemen. Zowel Git als Visual Studio hebben liever dat zij degene zijn die het hernoemen. Ik denk echter dat het hernoemen in Visual Studio de juiste manier is - wees gewoon voorzichtig met wat je daarna aan de Git kant doet. Hoewel dit in het verleden een beetje lastig is geweest, heb ik'gehoord dat het eigenlijk vrij naadloos zou moeten zijn aan de Git kant, omdat het kan opmerken dat de inhoud grotendeels hetzelfde zal zijn. (Niet helemaal hetzelfde, meestal - je hebt de neiging om een bestand te hernoemen wanneer je'de klasse hernoemt, IME).
Maar in principe - ja, het werkt prima. Ik'ben een Git newbie, maar ik kan het alles laten doen wat ik nodig heb. Zorg ervoor dat je een git ignore bestand hebt voor bin en obj, en *.user.
Ik vind dat Git, werkend op hele bomen zoals het doet, minder voordeel heeft van IDE integratie dan bronbeheer tools die ofwel bestandsgebaseerd zijn of een checkout-edit-commit patroon volgen. Natuurlijk zijn er gevallen waarin het leuk kan zijn om op een knop te klikken om wat geschiedenis onderzoek te doen, maar ik mis dat niet zo erg.
De echte must-do is om je .gitignore bestand vol te krijgen met de dingen die'niet in een gedeelde repository zouden moeten zitten. De mijne bevat over het algemeen (naast andere dingen) het volgende:
*.vcproj.*.user
*.ncb
*.aps
*.suo
maar dit is zwaar C++ bevooroordeeld met weinig of geen gebruik van enige class wizard stijl functionaliteit.
Mijn gebruikspatroon is ongeveer als volgt.
Code, code, code in Visual Studio.
Wanneer tevreden (verstandig tussenpunt om code te committen, overschakelen naar Git, wijzigingen stagen en diffs bekijken. Als er iets duidelijk mis is, schakel terug naar Visual Studio en repareer, anders commit.
Samenvoegen, branchen, rebasen of andere fancy SCM dingen zijn makkelijk te doen in Git vanaf de commando prompt. Visual Studio is normaal gesproken redelijk blij met dingen die eronder veranderen, hoewel het soms sommige projecten opnieuw moet laden als je'de project bestanden aanzienlijk hebt gewijzigd.
Ik vind dat het nut van Git zwaarder weegt dan het kleine ongemak van het niet hebben van volledige IDE integratie, maar het is, tot op zekere hoogte, een kwestie van smaak.