Over a million developers have joined DZone.

Visual Studio Tools for Git: A Primer

· DevOps Zone

Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure, brought to you in partnership with Sauce Labs

If you installed Update 2 CTP 4 (now it has go-live and supports upgrade to RTM) you should also install the Visual Studio Tools for Git that permits to work with Git repository directly from a Team Explorer extension. You can work with GitHub or whatever Git hosting you like and surely you can work with TF Service Git based Team Project. Once you have a Team Project based on Git you can simply to to the Source tab, and grab the url of the repository.


Figure 1: How to find the url of the Git repository from web interface

You can now copy the url, of you can simply compose id based on this scheme: https://myaccountname.visualstdudio.com/DefaultCollection/_git/teamprojectname. Once you have a link to the project you can use Visual Studio tools for Git to clone it into a local repository. From Figure 1 you can see a couple of interesting links: the first one link directly to the setting page to setup alternate credentials (you will need it if you plan to work with standard git tooling, like command line) to enable access from all the tools that have no idea how to autenticate to TF Service with federation. The second link is a simple link to an help page that explain how to clone a Git Repository.

If you plan to use Visual Studio integration, you can simply connect to the team project with the new Connect icon and once connected it will prompt you with a simple link to clone the repository


Figure 2: Once connected to the Team Project VS lead you to clone the repository.

Now that the repository is cloned correctly you can create a new solution, or open existing one if you cloned a non-empty repository and you start working as you were working with standardTFS Source control. If you modify a file Visual Studio will inform you with standard icon for modified filed


Figure 3: Source control integration will show you modified file as usual even if the repository is git

If you go to the home page of Team Explorer you should see a different UI, reflecting the fact that the repository is Git and not standard TFS VCS. Pressing Changes link you are presented with the list of modified files ready to be committed.


Figure 4: Changes bring you to an equivalent of the standard pending-changes window

This will open a standard UI that shows all modified files, untracked file (files that are in folder, but not added to source control), you can simply type a comment and press Commit.


Figure 5: Standard VS UI to commit changes to local repository

If you press the link Commit from the Team Explorer Home (Figure 4), the UI will show all local commit that are not synchronized to the remote repository.


Figure 6: Local commits that needs to be pushed to central repository

Now you need to pay lot of attention to the user associated to the commit, as you can see in Figure 6, commit is made by user alkampfergit and my profile picture is missing. This happens because I already installed Msysgit and configured it to access my github repositories. To verify your current configuration you can simply open a Git Bash (you need to install Msys git), and issue a

git config –global –list

You should keep care of a couple of settings: user.name and user.email, in my system they correspond to my profile in github, because I’ve already installed and configured git, Visual Studio is actually using those credentials and this is not so good. You can fix this going to settings from the home of Team Explorer and choose to change git settings


Figure 7: Git settings in Visual Studio

Now the problem is that VS will overwrite your global settings, and this can be a problem if you still work with github repositories, where I want to use Github username. The obvious solution is, configuring global settings with the user you use in most of your projects, and change locally for all other repositories. To do this, simply open a Git Bash on the folder where you cloned your TF Service Git project and change settings locally

git config–local user.name alkampfer

git config –local user.email alkampfer@nablasoft.com

Now you can do another commit, to verify that this time the user is correct.


Figure 8: Using correct user will show your profile picture.

Once you are ready to move all your changes to TF Service, you can simply press the Push button (Figure 8) to push all of your changes to TF Service. Now you can go to Web Interface to verify that your commits are correctly pushed to the server


Figure 9: Your commits were correctly pushed to the server

As you can see from Figure 9, first commit has no picture image, because it is associated to my github user. This can puzzle the inexperienced git user, because some people complain for this behavior because, after all, to push to TF Service git repository I need to use my TF Service credentials, so why git is using credentials from config instead of authentication ones? The answer is simple, in a distributed source control, the identity is used to push, but I can push commits that originated in another repository of another developer. This is clear if you go to the commits page of the web interface and have a look at commit detail.


Figure 10: Commit details

From the details you can see that there are three pieces of information, the user that authored and commited is taken from git config, and push operation carry the credential used to connect to the repository. Suppose this scenario, you have your project in TF Service Git repository, cloned in your machine and ask to another developer, that has no access to TF Service account, to contribute on a feature. He will clone from your local repository, helps you to create the feature, commits to your repository (with his username and email) and then his commits will be pushed by you bach to TF Service, but clearly his commits are not associated to any TF User.

Always remember, whenever you clone a git repository, to configure locally username and email if it is different from the standard one you configured in global git configuration. Your repository will be clearer.

Download “The DevOps Journey - From Waterfall to Continuous Delivery” to learn learn about the importance of integrating automated testing into the DevOps workflow, brought to you in partnership with Sauce Labs.


Published at DZone with permission of Ricci Gian Maria. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}