$ git clone --no-checkout $URL/repo.git
$ cd repo/
$ git sparse-checkout init
$ git sparse-checkout set subdirectory_i_want
$ git checkout main $ git clone --no-checkout $URL/repo.git
$ cd repo/
$ git sparse-checkout init
$ git sparse-checkout set subdirectory_i_want
$ git checkout mainThe command above downloads the whole repo history. You could do a depth=1 to skip the history, but it still downloads the he latest version of the entire repo tree.
Combined with --depth=1 and the --no-checkout / --sparse-checkout flow that the GP already described.
I just tested on the emacs repo, left column is disk usage of just the `.git` folder inside:
Shallow clones (depth=1):
124K: Treeless clone depth=1 with no-checkout
308K: Blobless clone depth=1 with no-checkout
12M: Treeless clone depth=1 sparse checkout of "doc" folder
12M: Blobless clone depth=1 sparse checkout of "doc" folder
53M: Treeless clone depth=1 non-sparse full checkout
53M: Blobless clone depth=1 non-sparse full checkout
53M: Regular clone with depth=1
Non-shallow clones:
54M: Treeless clone with no-checkout
124M: Blobless clone with no-checkout
65M: Treeless clone sparse checkout of "doc" folder
135M: Blobless clone sparse checkout of "doc" folder
107M: Treeless clone with non-sparse full checkout
177M: Blobless clone with non-sparse full checkout
653M: Full regular git clone with no flags
Great tech talk covering some of the newer lesser-known git features: https://www.youtube.com/watch?v=aolI_Rz0ZqYCould've been a shell script[2]
[1] https://github.com/zikani03/git-down/blob/cb2763020edc81e464...