I recently wanted to download a sample SignalR app from the Microsoft docs, and in the docs, Microsoft had bundled all of their sample applications into the same GitHub repository.

I only wanted a single folder:

https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/signalr/sample

The suggestion was to download the entire repository. I thought there must be a better way for me – and my hard drive – so I dug into Git a little and found this excellent technique.

Sparse-Checkout

A feature added in 2016 called sparse checkout allows you to specify folders you want to exclude and include in a git checkout. So to just download the signalr/sample folder here is the command.

git clone --no-checkout --depth 1 --single-branch https://github.com/aspnet/Docs.gitcd docsgit config core.sparsecheckout trueecho "aspnetcore/tutorials/signalr/sample/*" >> .git/info/sparse-checkoutgit checkout master

You will notice that if you run the above, the clone command on line 1 still downloads a number of objects. This is the git history. I couldn’t find a way to avoid this. However it is still far quicker than downloading the whole repository.

If you find a better way. Let me know.