Just a quick tip - I was looking for a way to download a single directory from my github repo. Unfortunately, the internet told me that this wasn’t possible because git doesn’t support this.
But after some searching I’ve found few solutions:
- some webistes can do this but it is hard to automate because they use js on client side and thats just too much hassle for me (downGit seems cool tho).
- github supports
svn
which can handle these sorts of stuff but I don’t want another program just for this simple task - hacky scripts that basically scrap the website and download everything
- or just download the whole repo and remove everything thats not needed (bad solution)
I didn’t like these so I’ve searched some more and found this - git sparse-checkout
. This thing (quite well documented on multiple blogs) is exactly what I was looking for.
All you need is git!
Here’s how to set it up:
Create working directory for your project
mkdir work
cd work
Init git directory inside and enable sparse checkout
git init
git config core.sparsecheckout true
Add remote repo
git remote add -f origin https://github.com/arturtamborski/c-playground
Write dirs that you want to pull to sparse-checkout
# this one is important (dont forget the leading slash!)
echo qotdd/ >> .git/info/sparse-checkout
Optionally you can link to this file for easier usage in the future
# now i can just add up dirs in this file
ln -s .git/info/sparse-checkout projects
# nice
echo echod/ >> projects
Finally, pull the files
git pull origin master
# if you want to do this
git pull
# then you'll have to do this
git branch --set-upstream-to=origin/master
And if you later want to pull other directory then add it up to projects
echo nslookup/ >> projects
# important
git read-tree -mu HEAD
# it should appear now
ls
Okay, this still seems like a hack because it breaks few things and effectively makes commits useless but this is still cool if you don’t want to play around with zips and tarballs.
Yeaaaah, I’ve searched some more and this feature seems way too hacky for me. It doesn’t really pull separate directries - instead it kinda hides everything except these from sparse-checkout
and I don’t like that.
I mean it does the job but maybe these tarballs aren’t that bad after all. Or maybe I shouldn’t just put everything into one repo.
Yeah, that was bad idea.
Don’t do that.