在Git中仅克隆新上传的文件

时间:2018-08-05 16:06:41

标签: git github repository clone commit

我正在尝试从在线存储库下载文件,主要是PDF。

但是,我只想下载特定提交的文件。存档总数超过1400个文件,最近一次提交将存档总数增加了约300个文件。

如何仅从存储库中克隆新上传的300个文件?

与我遇到的其他与下载单个文件有关的类似问题不同,我想下载整个提交(超过300个文件)。供参考,仓库在这里:

https://github.com/KingOfCramers/sidtoday

...以及我想下载的新文件(到我的本地计算机)的提交在这里:

https://github.com/KingOfCramers/sidtoday/commit/07b7008f215ffe784068d9d2d14fb5d76875ca24

1 个答案:

答案 0 :(得分:2)

  

真的没有办法简单地克隆/下载由单个提交上传的文件吗?

是的,真的没有办法简单地克隆或下载在单个提交中更新的文件。

在lesat,没有 in-Git 方式。如果您控制服务器,则可以将Git用作工具来构建所需的任何文件。如果服务器是GitHub,请参见最后一段。

此问题的根源在于,提交不仅包含更改的文件,也不包含更改:每个提交都是 all的完整快照文件。因此,要找出发生了什么变化,您必须从两个快照开始。将此视为Spot the Difference个游戏之一:一张照片对您不利,您必须同时获得两张照片。

总体而言,Git旨在提供 all 个快照。这些是承诺;提交就是存储库中的内容;所以这些就是你得到的。如果您希望获得不同的结果,则服务器上的Git拥有所有快照,并且可以进行比较,您可以使用它编写自己的软件来完成您想做的事情,但是您需要控制Git服务器上的软件。幸运的是,您可以将整个存储库克隆到您的客户端上,然后您的客户端完美的服务器。

请注意,一旦有了克隆文件,git fetch 进入克隆文件就会使用一种协议,该协议通过让两个Git比较注释来尝试最小化网络流量。然后,服务器准备一个所谓的 thin pack ,其中包含您已经拥有的对象的增量(只要可行),以便您实际上只获得增量更改!但是,要使其正常工作,您必须具有一个现有克隆。

也请注意,如果您的服务器专门是 GitHub ,则GitHub提供了REST API(嗯,可能有多个API:当前是version 3),您可以使用该API比较提交和下载文件。尤其参见https://developer.github.com/v3/git/trees/关于获取树的信息(每次提交中的快照都是一棵树)。请注意,如果超出长度限制,无论如何都会迫使您进行克隆。