如何获取GitHub LFS(大文件存储)中文件的直接链接?

17
我使用Git LFS (大文件存储)将一个大文件上传到GitHub。起初,我可以通过直接链接下载该文件。
raw.githubusercontent.com/userName/reposiotry/master/file.mp4

但是第二天,该文件开始包含文本值

oid sha256:59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1
size 123882252

我该如何下载这个文件?如何获取直接链接?

3个回答

5

假设ServerAddress是https://api.github.com

  1. 如果您知道RepoName('UserName / RepositoryName'对)和FileHash,则可以获取: ServerAddress +'/repos/RepoName/git/blobs/FileHash'
    如果响应中有:
version https://git-lfs.github.com/spec/v1  
oid sha256:59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1  
size 123882252
  1. 然后您必须在存储库内容中搜索匹配的FileHash,
    获取:ServerAddress + '/repos/RepoName/contents'
    并且您会得到以下响应:
{
  "name": "filename.ext",
  "path": "path/filename.ext",
  "sha": "FileHash",
  "size": 42,
  "url": "https://api.github.com/repos/RepoName/contents/path/filename.ext?ref=master",
  "html_url": "...",
  "git_url": "...",
  "download_url": "...",
  "type": "file",
  "_links": { ... }
}

现在你需要获取url的值,并抓取它。响应数据如下:
{
  "name": "filename.ext",
  "path": "path/filename.ext",
  "sha": "FileHash",
  "size": 720896,
  "url": "...",
  "html_url": "...",
  "git_url": "...",
  "download_url": "https://media.githubusercontent.com/media/RepoName/RepoHash/path/filename.ext?token=...",
  "type": "file",
  "content": "...", // same as response from pt. 1
  "encoding": "base64",
  "_links": { ... }
}
  1. 现在您需要获取download_url的值并进行提取,
    响应中会返回BINARY文件内容。

在第二步中的filesha,它在第二步的响应中是否为“59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1”? - EvanL00
不,这是来自第一步的FileHash。在第二步中要找到的标识符不是oid sha256:59f24bc922e1a48bb3feeba18b23f0e9622a7ee07166d925650d7a933283f8b1 - NevTon
你的方法适用于Git LFS吗?当你获取包含文件的文件夹时,你将获得文件哈希和下载链接。无需执行步骤#1和#2。问题是下载链接是指针文件而不是实际文件。 - EvanL00
谢谢您的回复!我不太理解第二步。这是否意味着我需要遍历我的存储库中的所有文件以获取匹配的FileHash?我该如何获得这个FileHash?例如,链接https:://myrepo.github.com/user/repo/Folder中有一个大文件。第一步,我如何获取大文件的“FileHash”?第二步,如何找到与第一步“FileHash”匹配的响应 - EvanL00
文件哈希存储在 sha 键中。 - NevTon
显示剩余2条评论

3

从这篇文章中摘录的内容:

存储配额

如果您使用超过1 GB的存储空间而没有购买数据包,则仍可以克隆具有大型资产的存储库,但您只将检索指针文件,无法将新文件上传。

我假设您没有在GitHub上为git lfs购买任何附加存储空间。正如您所说,最初您可以通过此链接访问: http://raw.githubusercontent.com/userName/reposiotry/master/file.mp4

我猜测您上传了更多的类似文件,导致您超出了1GB的存储配额。正如上文所述,一旦超出配额,您只会检索到指针文件。

您可以在此处检查存储配额是否超限:https://github.com/settings/billing

但如果我的猜测是错误的,那么您可以尝试使用此链接获取文件:

https://media.githubusercontent.com/media/user_name/repository_name/branch_name/file_name


我超出了配额(我以为只适用于私有存储库,但我有公共存储库)。现在我陷入了困境,因为我想从存储库中删除文件以达到配额以下,但我需要先获取这些文件才能进行删除。GitHub不允许我克隆存储库,看起来我也无法访问该文件。那么我应该如何访问该文件呢? - Csaba Toth

1
你需要进入网页界面,找到你的文件的原始链接,并使用该链接代替。使用Git LFS时,实际存储在仓库中的文件是像上面看到的指针文件。GitHub有不同的URL来为仓库内容和Git LFS文件提供原始内容,因此如果您想获取Git LFS内容,则需要使用适当的链接。如果您以前拥有该文件作为非LFS文件,则在将其重新上传为LFS文件时,URL将更改。请注意,不鼓励在网页或其他地方使用这些URL作为CDN的形式使用这些直接链接。

我来补充一下:lfs在GitHub上存储的指针指向了Amazon,但你无法直接访问该链接。当你想要通过指针引用一个文件时,你的计算机会访问GitHub并请求该链接。你会得到该链接以及一个将要过期的访问令牌。这样,GitHub就可以监控你的使用情况并防止滥用。 - Eyal
据说GitHub使用亚马逊预签名URL。 - Kamafeather

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接