gitgit-clonegit-subtree

Cloning subtree/subdirectory of git repo


I have a git repo on Github, looks like so:

.git/
assets/
  tools/
    a.sh
    b.sh
    c.sh

of course the .git folder is not in version control, but you get the idea. And I want to copy the tools/*.sh to a local directory, at this path:

./scripts/git/tools

My current directory is a git repo that shares a totally different history than the remote git repo, I just want to copy some files from the remote, I don't want to merge anything.

I figure I could do something like this:

git clone --path assets/tools/*.sh "$remote_repo"  ./scripts/git/tools

but that command is not real, is there some command I can use to do this?

the only other way I can think of doing it, is cloning the whole repo to some temp directory and then copying the files over, but that's not as much fun.


Solution

  • the only other way I can think of doing it, is cloning the whole repo to some temp directory and then copying the files over, but that's not as much fun.

    Yet, this is preferable, considering that even a partial clone, if it existed, would still preserve the asset/tools path structure.
    You can do a sparse checkout elsewhere, and then copy your files.

    With Git 2.17/2.18, you can attempt a partial or narrow clone, to clone only a subfolder, but that supposes the remote server does support this new feature.

    Another more classic option is to use (if the remote repository supports it) the archive (zip file) of the latest HEAD: see "How to checkout only one file from git repository ('sparse checkout')?", but apply to a subfolder of the archive, instead of a file.