2

我试图了解如何(如果可能的话)从Git仅复制特定目录的特定文件。(对继续处理这些文件或获取历史不感兴趣remote

例如,假设远程 master 分支拥有(以及许多其他)一个目录,该目录的名称\src是文件.cpp.h文件。怎么可能只获得所有头.h文件的副本?

当然,我正在寻找一种不会导致重新编写 repo 或任何其他不良副作用的方法。简单地说,只从远程获取一些指定文件的本地副本。

我考虑过git archivesparse-checkout但不明白我是否可以使用它们来实现我的目标。

4

1 回答 1

0

您可以在以下期间指定两种子集git clone

  1. -b branchname --single-branch允许您仅获取直接导致branchname. 它将跳过所有没有必要完全描述的内容branchname
  2. --depth n允许您将历史截断超过一定深度。

除此之外,clone(以及commit, push, pull, merge)等总是通过设计处理从根开始的整个目录树。( commitobject) 是他们使用的项目,他们不知道单个文件(与 CVS 或 SubVersion 不同,例如,它们可以并且定期处理单个文件)。

有一些方法可以处理特定的文件/目录,但这些方法相当低级,可能不是您想要的。例如,您可以使用 git 协议直接获取单个 git 对象(提交、树、blob ......)......但我觉得这不是你想要的。

更新:如果您只想获取文件并忽略历史记录,那么您可以使用--depth 1(获取整个目录树,但仅用于一次提交),获取文件并完成它。你仍然需要下载比你需要的更多的东西,但至少它比整个历史要少很多(对于像 Linux 内核这样的大的东西)。

更新 2:我很确定,除了自己实现 git 网络协议外,没有办法使用 git 命令从远程获取单个位和片段。如果您自己谈论协议,那当然(相对)容易。http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols描述了它,自己使用它似乎并不难。

于 2017-03-17T12:19:28.703 回答