I want to checkout a single folder from my git repo (i.e. an sparse checkout), but I didn’t find an option to do it with with the git resource.
So I’m thinking of modifying the resource’s source code to add this option, but first I wanted to confirm there is not already a way this can be accomplished.
I also found this other topic, and the fact this person didn’t get an answer makes me think there is no solution at the moment, so the feature is required.
Why we need this?
Sometimes we need only a file or small directory that lies in a big repository. Doing a shallow clone (depth=1) doesn’t solve the problem because it still clones all of the files in the tip of the branch.
The way we accomplish this with plain git is by issuing these commands:
git init <my_repo>
git remote add origin <my_repos_url>
git config core.sparsecheckout true
echo “my_directory/*” >> .git/info/sparse-checkout
git pull --depth=1 origin master
Notice we cannot use a
git resource here as we need to modify the
.git/info/sparse-checkout file before the clone/pull is made.
Other possible solutions
There is are 2 workarounds I can think of, each one with its own problems:
We can use
git archive in an
execute resource. Git archive can be told to download only a single file or a single directory, and then we can uncompress the archive on the fly:
git archive --remote=<repo_url> HEAD:<path/to/directory> filename | tar -x
The problem with that solution is that each time chef-client runs it will download the file/directory again, and adding a
creates in the
execute resource doesn’t help because then we won’t notice when the file/directory has changed in the remote repository. This new problem can be solved by having an additional
execute resource that first executes
git to query the latest version of the branch and then notifies a third
git archive to download the files again, but then we need 2
execute resources for doing what we may expect to accomplish with a single
So my question is, am I overly complicating things and there is another way of doing this or indeed it would be useful to modify the