``` git init cd git remote add -f origin ``` This creates an empty repository with your remote, and fetches all objects but doesn't check them out. Then do: ``` git config core.sparseCheckout true ``` OR since git 2.25.0 ``` git sparse-checkout init ``` Now you need to define which files/folders you want to actually check out. This is done by listing them in .git/info/sparse-checkout, eg: ``` echo "some/dir/" >> .git/info/sparse-checkout echo "another/sub/tree" >> .git/info/sparse-checkout ``` OR since git 2.25.0 ``` git sparse-checkout set "some/dir/" git sparse-checkout set "another/sub/tree" ``` Last but not least, update your empty repo with the state from the remote: ``` git pull origin master ``` Source: http://stackoverflow.com/a/13738951/2574238