[ExternalProject] GIT_SHALLOW is not shallow enough
Hi, the use-case of "GIT_SHALLOW 1" is to optimize the cloning to download as little as possible. But the ExternalProject_Add implementation does this: ``` if(NOT GIT_VERSION_STRING VERSION_LESS 1.7.10) set(git_clone_shallow_options "--depth 1 --no-single-branch") else() set(git_clone_shallow_options "--depth 1") endif() ``` For some git versions the **--no-single-branch** option is passed, and this option will cause all branch HEAD's to be downloaded, instead of just the branch/tag/commit that one wanted to download. This causes a performance problem if a branch exists purely to prune the master branch. My question is: Why is this option passed for some git --versions? Is there a way we can support single-sha downloads with CMake? Should the documentation be updated to reflect that GIT_SHALLOW does not just download a single revision? CMake documentation: GIT_SHALLOW <bool> When this option is enabled, the ``git clone`` operation will be given the ``--depth 1`` option. This performs a shallow clone, which avoids downloading the whole history and instead **retrieves just the commit** denoted by the ``GIT_TAG`` option. git documentation: > --depth <depth> > Create a shallow clone with a history truncated to the > specified number of commits. Implies --single-branch > unless --no-single-branch is given to fetch the > histories near the tips of all branches. If you want to > clone submodules shallowly, also pass > --shallow-submodules. > > --[no-]single-branch > Clone only the history leading to the tip of a single > branch, either specified by the --branch option or the > primary branch remote’s HEAD points at. Further fetches > into the resulting repository will only update the > remote-tracking branch for the branch this option was > used for the initial cloning. If the HEAD at the remote > did not point at any branch when --single-branch clone > was made, no remote-tracking branch is created. >
issue