git clone, ignoring a directory
I'm trying to test something on a wordpress install. In doing so, I'd like to quickly replicate the repo. However, the upload directory (wp-content/uploads
) is massive, so I'd like to ignore it.
Note: I don't want to .gitignore this directory all the time, just for this scenario.
Basically, I'd like a command like this pseudo code: git clone --ignore wp-content/uploads
.
Is the best way to add that directory to .gitignore, clone, and then revert .gitignore? Or is there a better method?
A bit late to the party, but: Don't you want a sparse checkout?
mkdir <repo> && cd <repo>
git init
git remote add –f <name> <url>
Enable sparse-checkout:
git config core.sparsecheckout true
Configure sparse-checkout by listing your desired sub-trees in .git/info/sparse-checkout:
echo some/dir/ >> .git/info/sparse-checkout
echo another/sub/tree >> .git/info/sparse-checkout
Checkout from the remote:
git pull <remote> <branch>
See http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/ for more info.
git clone
will always clone the complete repository*, including all previous commits ever added to the repository. So even if you remove the files temporarily, and clone it then, you will still receive the older versions which do contain those files.
Also, just editing the .gitignore
will not remove tracked files from the repository even if they would normally be ignored.
So no, it is not really possible to skip a certain folder during cloning.
*It is possible to limit the amount of commits retrieved during a clone, but this will not make the repository very usable.
you can specify the depth to clone (--depth=1
to get only 1 commit). You may want to set up a branch with this directory missing and then clone with depth of one only. Since git is snapshot based, it's not easy to exclude a part of a commit when cloning. This is the closest to what you want.
If you have full control of this repo, you may want to make a submodule of this directory and only do a submodule update when you want to admin that part.