您可以在以下期间指定两种子集git clone
:
-b branchname --single-branch
允许您仅获取直接导致branchname
. 它将跳过所有没有必要完全描述的内容branchname
。
--depth n
允许您将历史截断超过一定深度。
除此之外,clone
(以及commit
, push
, pull
, merge
)等总是通过设计处理从根开始的整个目录树。( commit
object) 是他们使用的项目,他们不知道单个文件(与 CVS 或 SubVersion 不同,例如,它们可以并且定期处理单个文件)。
有一些方法可以处理特定的文件/目录,但这些方法相当低级,可能不是您想要的。例如,您可以使用 git 协议直接获取单个 git 对象(提交、树、blob ......)......但我觉得这不是你想要的。
更新:如果您只想获取文件并忽略历史记录,那么您可以使用--depth 1
(获取整个目录树,但仅用于一次提交),获取文件并完成它。你仍然需要下载比你需要的更多的东西,但至少它比整个历史要少很多(对于像 Linux 内核这样的大的东西)。
更新 2:我很确定,除了自己实现 git 网络协议外,没有办法使用 git 命令从远程获取单个位和片段。如果您自己谈论协议,那当然(相对)容易。http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols描述了它,自己使用它似乎并不难。