代码之家  ›  专栏  ›  技术社区  ›  Harrison Cramer

只克隆Git Commit中新上传的文件

  •  0
  • Harrison Cramer  · 技术社区  · 6 年前

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

    但是,我只想下载特定提交的文件。归档文件总数超过1400个,最新提交的文件约为归档文件总数的300个。

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

    与我遇到的其他与下载单个文件相关的类似问题不同,我希望下载整个提交,即超过300个文件。作为参考,回购协议如下:

    https://github.com/KingOfCramers/sidtoday

    ... 提交要下载的新文件(到本地计算机)如下:

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   torek    6 年前

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

    是的,那里 确实无法简单地克隆或下载在单个提交中更新的文件 .

    在莱萨,没有 单位:吉特 太好了。你可以使用Git作为 工具 如果你控制了服务器,你想建什么就建什么。如果服务器是GitHub,那么请参阅最后一段。

    这个问题的根源在于提交不只是包含 更改的文件 ,也不包含 变化: 每次提交都是 全部的 文件夹。因此,要找出变化,必须从 快照。把这个当作 Spot the Difference 游戏:拍一张照片对你没有好处,你必须同时拍两张。

    总体而言,Git旨在提供 全部的 快照。这些是提交;提交是存储库中的内容;所以这些是您得到的。如果您想要一个不同的结果,Git在服务器上拥有所有的快照,并且可以进行比较,您可以使用它来编写自己的软件,该软件可以执行您希望执行的任何操作,但是您需要控制Git服务器上的软件。幸运的是,您可以将整个存储库克隆到您的客户机上,然后再克隆您的客户机 一个非常好的服务器。

    注意一旦你有了克隆, git fetch 进入之内 该克隆使用了一种协议,通过让两个git比较notes来尽量减少网络流量。然后服务器准备一个所谓的 薄包装 它包含来自你已经拥有的对象的delta,在任何可行的地方,这样你实际上只得到增量的变化!但是,要做到这一点,你必须有一个现有的克隆。

    也要注意,如果您的服务器 github ,GitHub提供了一个REST API(可能有多个API:当前的一个是 version 3 ),您可以使用该API来比较提交和下载文件。具体见 https://developer.github.com/v3/git/trees/ 关于获取树(每个提交中的快照是树)。请注意,有一些长度限制,如果超出,将强制您进行克隆。