I’ve been using Visual Studio Online for a bit, so the example in this post will specifically show that, but the concept applies anywhere.

If you have a project up there named foo, the git clone URI is something like


It’s a real pain to type all that. So I did this in my .gitconfig

qc-ds = "!f() { p=${1}; d=${2-$1}; git clone https://me.visualstudio.com/DefaultCollection/_git/$p $d; }; f"


To clone myproject into myproject,

git qc-ds myproject

To clone myproject into somedirectory,

git qc-ds myproject somedirectory


qc stands for quick clone.

ds is an abbreviation of the me part of my VSO account. It’s meaningful to me. Make yours whatever you want.

The rest creates a function and executes it. The first argument is assigned to p (“project”). The second is optional and is assigned to d (“directory”). It defaults to p if not supplied. Then it’s just filling in the blanks.


This gets a little weirder if you have multiple repositories in a project, e.g. a second repo named bar inside of the foo project


I know how I’m going to tackle this, but I will leave it as an exercise for the reader.

And of course, if you’re on GitHub, BitBucket, or whatever…the repo URIs are usually pretty standard. Just :s it!