ExternalProject: clone git repos into the DOWNLOAD_DIR and then use --reference for SOURCE_DIR
At least git clones can be persisted this way; I'm not sure what other tools support. The directory should be named using the project name and a hash of the URL.