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.git

cd docs

git config core.sparsecheckout true

echo "aspnetcore/tutorials/signalr/sample/*" >> .git/info/sparse-checkout

git 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.