Git 仅从远程复制特定文件
Git copy only specific files from remote
我正在尝试了解如何(如果可能的话)仅从中的remote
复制特定目录的特定文件Git。 (对继续处理这些文件或获取历史记录不感兴趣)
例如,假设远程 master 分支拥有(以及许多其他)名称为 \src
的目录,其中有 .cpp
和 .h
文件。怎么可能只得到所有头.h
文件的副本?
当然,我正在寻找是否存在一种 不会 导致重写存储库或任何其他不良副作用的方法。很简单,从远程只获取一些指定文件的本地副本。
我考虑过 git archive and sparse-checkout 但不明白我是否可以使用它们来实现我的目标。
您可以在 git clone
期间指定两种子集:
-b branchname --single-branch
允许您只获取直接导致 branchname
的那些历史部分。它将跳过所有不必要的内容来完整描述 branchname
.
--depth n
允许您截断超过一定深度的历史记录。
除此之外,clone
(以及commit
、push
、pull
、merge
)等等总是 设计过程整个目录树从根开始。 commit
(对象)是他们使用的项目,他们不知道单个文件(与 CVS 或 SubVersion 相反,例如,它们可以并定期对单个文件进行处理)。
有一些方法可以处理特定的 files/directories,但这些方法相当低级,可能不是您想要的。例如,您可以使用 git 协议直接获取单个 git 对象(提交、树、blob...)...但我觉得这不是您要的。
更新:如果你只想抓取文件而忽略历史,那么你可以使用--depth 1
(获取整个目录树,但只是为了一次提交),获取你的文件,然后完成它。你仍然需要下载比你需要的多得多的东西,但至少它会比整个历史少很多(对于像 Linux 内核这样的大东西)。
更新 2: 我很确定,除了自己实现 git 网络协议外,没有办法获取单个零碎的片段从远程使用 git 命令。如果您自己谈论协议,那当然(相对)容易。 http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols描述了一下,自己用起来好像也不难。
我正在尝试了解如何(如果可能的话)仅从中的remote
复制特定目录的特定文件Git。 (对继续处理这些文件或获取历史记录不感兴趣)
例如,假设远程 master 分支拥有(以及许多其他)名称为 \src
的目录,其中有 .cpp
和 .h
文件。怎么可能只得到所有头.h
文件的副本?
当然,我正在寻找是否存在一种 不会 导致重写存储库或任何其他不良副作用的方法。很简单,从远程只获取一些指定文件的本地副本。
我考虑过 git archive and sparse-checkout 但不明白我是否可以使用它们来实现我的目标。
您可以在 git clone
期间指定两种子集:
-b branchname --single-branch
允许您只获取直接导致branchname
的那些历史部分。它将跳过所有不必要的内容来完整描述branchname
.--depth n
允许您截断超过一定深度的历史记录。
除此之外,clone
(以及commit
、push
、pull
、merge
)等等总是 设计过程整个目录树从根开始。 commit
(对象)是他们使用的项目,他们不知道单个文件(与 CVS 或 SubVersion 相反,例如,它们可以并定期对单个文件进行处理)。
有一些方法可以处理特定的 files/directories,但这些方法相当低级,可能不是您想要的。例如,您可以使用 git 协议直接获取单个 git 对象(提交、树、blob...)...但我觉得这不是您要的。
更新:如果你只想抓取文件而忽略历史,那么你可以使用--depth 1
(获取整个目录树,但只是为了一次提交),获取你的文件,然后完成它。你仍然需要下载比你需要的多得多的东西,但至少它会比整个历史少很多(对于像 Linux 内核这样的大东西)。
更新 2: 我很确定,除了自己实现 git 网络协议外,没有办法获取单个零碎的片段从远程使用 git 命令。如果您自己谈论协议,那当然(相对)容易。 http://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols描述了一下,自己用起来好像也不难。