从GitHub下载单个文件


625

我想大多数开发人员都使用任何VCS,并且希望你们中的某些人使用Git。您是否有技巧或窍门,如何获得存储库中单个文件的下载URL?

我不希望显示原始文件的URL。如果是二进制文件,那就没有用了。

http://support.github.com/discussions/feature-requests/41-download-single-file

甚至可以将GitHub用作“下载服务器”吗?

如果我们决定切换到Google Code,是否在此提供了上述功能?

还是为开源项目提供免费的托管和VCS?


3
GitHub Releases功能已经介入以填补这一角色。
pkamb

@RadekSimko DownGit可能会帮助您。看到这个答案。
Minhas Kamal

1
对于GitLab,请参阅stackoverflow.com/a/51993087/6309
VonC

这对每个人都行不通,但是如果您使用python熊猫,则可以执行以下操作(也适用于大文件):单击“查看原始文件”,然后从浏览器复制url,然后执行以下操作:df = pd.read_csv( ' raw.githubusercontent.com/t-davidson/... ')
格雷厄姆赫斯基

在chrome上为github尝试Gitzip
subtleseeker

Answers:


580

Git不支持下载存储库的某些部分。您必须全部下载。但是您应该能够使用GitHub做到这一点。

当您查看文件时,它具有指向“原始”版本的链接。该URL构造像这样

https://raw.githubusercontent.com/user/repository/branch/filename

通过填写URL中的空格,您可以使用WgetcURL(带有-L选项,请参见下文)或任何下载单个文件的方法。同样,这样做不会获得Git使用的任何出色的版本控制功能。

更新:我注意到您提到这不适用于二进制文件。您可能不应该在Git存储库中使用二进制文件,但是GitHub为每个存储库提供了一个下载部分,您可以使用该部分来上传文件。如果需要多个二进制文件,则可以使用.zip文件。下载上载文件的URL为:

https://github.com/downloads/user/repository/filename

请注意,上面给出的网址(从上的链接github.com)将重定向到raw.githubusercontent.com。您不应该直接使用此HTTP 302重定向给出的URL,因为根据RFC 2616:“由于重定向有时可能会更改,因此客户端应继续将Request-URI用于将来的请求。”


16
后代注意事项:我刚刚对其进行了测试,并且对二进制文件使用原始工作效果很好。
emmby

1
尝试获取约10 MB的zip文件时出现错误:错误:blob太大
2013年

32
建议的网址格式对我不起作用。我发现https://raw.github.com/user/repository/branch/filename起作用。
Brian C.

5
@BrianC。:(至少从2013年8月27日开始),答案中提到的URL格式(raw在存储库名称之后)现在自动重定向到您提到的格式(主机名raw.github.com)。如有疑问,请浏览至github.com上的相关文件,然后单击“原始”按钮。
mklement0

10
如果您仍然想使用curl,请在命令行上使用-L选项遵循重定向:curl -L -O github.com/user/repository/raw/branch/filename
Lynx-Lab

560
  1. 转到您要下载的文件。
  2. 单击它以查看GitHub UI中的内容。
  3. 在右上角,右键单击Raw按钮。
  4. 另存为...

22
复制URL,而不是“另存为”。多数民众赞成在文件的网址。现在,您可以使用该网址下载任何工具下载:wget的,您的浏览器等
jgomo3

1
@MattParkins我刚刚尝试过,我认为它现在可以用于大文件(甚至带有“我们现在无法显示如此大的文件”警告的二进制文件)
lmsurprenant

3
停止执行此详细步骤,使用此chrome扩展程序即可。chrome.google.com/webstore/detail/github-mate/…–
Cam Song

3
My God一个简洁,直接,简单易懂,易于阅读和理解的答案,不仅有意义,而且无需任何外部第三方BS即可工作!如果只有所有StackOverflow答案都是这么简单。谢谢。
帕达万2015年

2
这适用于单个C#文件。也许github应该添加另一个下载按钮。右键单击按钮不是很直观。
尼克

39

您可以使用V3 API获取这样的原始文件(您需要OAuth令牌):

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

所有这些必须合而为一。该-O选项将文件保存在当前目录中。您可以-o filename用来指定其他文件名。

要获取OAuth令牌,请按照此处的说明进行操作:https : //help.github.com/articles/creating-an-access-token-for-command-line-use

我也将其写成要点:https : //gist.github.com/madrobby/9476733


4
这是一个很好的选择,但不幸的是,它仅支持最大1 MiB的文件。
Per Lundberg 2014年

1
如果在程序中执行此操作,请确保已设置User-Agent。
楚格沃特2014年

1
您能举一些例子吗?如果您的回购是my-repo,而您想要获取的文件位于x / y / z.txt,则URL将是...很难弄清楚/ owner / repo /应该由我填写。谢谢。
灰色

这可以正常工作,但有一个缺点。您不一定总是文件的最新版本。尝试对文件进行修改,不要等待太久,并尝试使用此方法来检索文件。您将只获得以前的版本。
pacomix

34

根据这个要点,您可以使用wget或cURL:

  1. 单击GitHub存储库中的文件名。
  2. 单击原始以显示文件内容。
  3. 在浏览器中复制URL。
  4. 在命令行中,运行以下任一命令:

    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

    还有一项:在RHEL7.6中,运行以下命令:

    • wget https://URL-from-step3/ --output-document=FILE_NAME

wget在github存储库中查看文件并单击Raw按钮后,我使用了所需的C源文件的原始路径。工作就像在我的树莓派3. Raspbian一个冠军
理查德·钱伯斯

我玩游戏有点迟了,但这对我来说非常有效。查看原始内容,然后右键单击以下载并不适合我的情况,因为我需要使用计算机无法提供的特定格式的文件。该答案中的命令按原样下载所有内容。
Seankala

16

GitHub Mate使单个文件的下载变得毫不费力,只需单击该图标即可下载,目前仅在Chrome 上可用

GitHub Mate下载


1
@jcollum刚刚选中,对我有用。您可以确定使用的是最新版本吗?或让我知道错误。很高兴为您提供帮助。
Cam Song

2
我使用的是最新版本的Chrome,34.0.1847.116,这肯定行不通。您使用什么操作系统?我在OS X Mavericks上。
Jahkobi Digital

我在Windows 7和OS X Mavericks上的Chrome 34上进行了测试,都可以使用。如果不工作就很奇怪吧?请注意,该文件夹不可下载。也许您可以尝试其他机器。
Cam Song

好的,仅当您使用Chrome扩展程序时,该方法才有效。chrome.google.com/webstore/detail/github-mate/...
humazed

从此视图中,只需右键单击并另存为文件
Thierry Dalon

16

您可以使用curl这种方式:

curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file

O表示curl下载内容
L意味着curl遵循重定向


15

现在可以在GitHub中对任何文件进行操作。您需要翻译raw.github.com的文件。例如,如果文件在存储库中,位于:

https://github.com/<username>/<repo>/some_directory/file.rb

使用wget可以从以下位置获取原始文件:

https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb

Rails Composer就是一个很好的例子。


2
有些文件在raw.githubusercontent.com托管
jcollum

1
有时是raw2.github.com只是
fyi

11

有一个Chrome扩展程序叫做Enhanced Github

它将在每个文件的右侧直接添加一个下载按钮。

在此处输入图片说明


这比Github Mate更好,仅因为它不要求“读取所有浏览历史记录”权限!请记住右键单击下载按钮>将链接另存为。
Gh0sT

有必要从您的GitHub帐户添加令牌。
BartusZak

使用安全吗?
阿里安·萨普特拉

1
@Ariansaputra我已经使用了很长时间了,从未遇到任何问题。应该很安全。我不明白为什么会这样
亚伯拉罕·穆尔西亚诺·本扎登

@AbrahamMurcianoBenzadon感谢
Arian saputra

10

要跟进thomasfuchs所说的,但对于GitHub Enterprise用户来说,这是您可以使用的。

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path

这也是API文档https://developer.github.com/v3/repos/contents


1
您能举一些例子吗?如果您的回购是我的回购,而您想要获取的文件位于x / y / z.txt,则URL将是...谢谢
Gray

1
@Grayhttps://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
Gregory Suvalian '17

如果我想从分支机构下载文件?我该怎么做?
卡洛斯·安德列斯


9

如果你想从下载的zip文件github使用wget

wget -O filename.zip https://github.com/downloads/user/repository/filename.zip?raw=true

看到这个网站了解更多详情


您可以下载任何文件,而不仅仅是.zip。
enriquetaso

6

由于我从未使用过MAC,因此该方法适用于Windows,因此我不知道MAC中用于替代密钥的替代密钥是什么,下面将要提及。

让我们谈谈CSV文件。如果要下载CSV文件,请执行以下操作:

  1. 转到要下载的特定数据集,然后单击它。
  2. 您将在数据集的右上方看到“原始”按钮。
  3. 按下“ Alt”,然后左键单击“ Raw”按钮。
  4. 整个CSV文件将下载到您的系统中。

请记住,您必须同时按Alt和左键单击。只需单击“原始”按钮,即可在浏览器中打开CSV。

希望对您有所帮助。


5

您只需要使用raw文件的URL即可。

例如,下载AFNetworking的自述文件:

curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md 

由于它是公共存储库,因此不需要任何凭据。请注意网址类型:raw.githubusercontent.com/path/to/file


4

2019年总结

有多种方法可以解决此问题,具体取决于文件的大小,是否需要下载除文件之外的文件夹,以及您打算手动还是以编程方式进行此操作。

下面总结了六个选项。对于那些更喜欢动手做解释的人,我整理了一个YouTube视频:从GitHub下载单个文件和文件夹

另外,对于需要从GitHub下载单个文件夹/目录(而不是文件)的用户,我在StackOverflow上发布了类似的答案


1. GitHub用户界面

  • 大多数图片上都有一个下载按钮。
  • 存储库主页上有一个下载按钮。当然,这将下载整个存储库,然后您需要解压缩下载文件,然后手动拖出所需的特定文件。

2.浏览器上下文菜单

  • 转到GitHub上的文件,右键单击“ Raw”按钮以打开浏览器的上下文菜单。从那里开始,如果您使用的是Google Chrome浏览器,请选择“将链接另存为...”。其他浏览器将具有类似的UI,但是选择说明可能有所不同。例如,在Safari上,它将被列为“下载链接的文件”和“下载链接的文件为”。

3.第三方工具

  • 有多种浏览器扩展程序和Web应用程序可以处理此问题,其中DownGit就是其中之一。只需将GitHub URL粘贴到文件中,然后按“下载”按钮。请注意,该链接应为GitHub.com托管的存储库视图,而不是直接文件链接。文件链接示例:https://github.com/babel/babel-eslint/blob/master/lib/parse.js

4.颠覆

  • GitHub不支持git-archive(允许我们下载特定文件的git功能)。但是GitHub确实支持多种Subversion功能,我们可以为此使用其中之一。Subversion是一个版本控制系统(替代git)。您需要安装Subversion。获取要下载文件的GitHub URL。不过,您需要修改此URL。您需要链接到存储库,后跟单词“ trunk”,并以嵌套文件的路径结尾。换句话说,使用上面提到的相同文件链接,我们将“ blob / master”替换为“ trunk”。最后,打开一个终端,导航到要将内容下载到的目录,键入以下命令(将URL替换为您构建的URL):svn export https://github.com/babel/babel-eslint/trunk/lib/parse.js

5. cURL

  • 您需要安装cURL。转到GitHub.com上的文件,左键单击“原始”按钮以转到直接文件链接,复制此URL,打开终端,导航至您要下载内容的目录,输入以下命令,将文件名替换为您要命名的文件名,然后将URL替换为刚复制的文件名:curl -o parse.js https://raw.githubusercontent.com/babel/babel-eslint/master/lib/parse.js

6. GitHub API

  • 这实际上是DownGit在后台使用的功能。使用GitHub的REST API,向内容端点发出GET请求。端点可被构造为如下:https://api.github.com/repos/:owner/:repo/contents/:path。替换占位符后,示例端点为:https://api.github.com/repos/babel/babel-eslint/contents/lib/parse.js。这会为您提供该文件的JSON数据,包括下载URL(与我们在上面的cURL示例中使用的下载URL相同)。但是,此方法对单个文件并不是很有用(如我上面链接的答案中所述,您更有可能将其用于下载特定文件夹)。

我的理解是下载按钮不会下载整个软件库...我可能是错的。这是一个示例:github.com/googleapis/google-api-php-client如果下载存储库,则不会获得示例目录;您必须更改分支才能做到这一点。
艾伯特

1
@albert好抓住。这实际上是因为他们特别排除特定文件夹/在.gitattributes文件中的文件:github.com/googleapis/google-api-php-client/blob/master/...
jabacchetta

很好,谢谢分享!TIL ...
albert

4

GitHub发布功能

您应该使用GitHub的Releases功能将可下载数据(例如已编译的二进制文件)与用于生成该数据的源代码的已标记版本相关联,而不是链接来下载回购中的特定文件。

https://github.com/blog/1547-release-your-software

我们很高兴宣布发布,这是一个将软件交付给最终用户的工作流程。发布是具有变更日志和二进制资产的一流对象,这些对象提供了除Git工件之外的完整项目历史记录。

发行随附发行说明和下载软件或源代码的链接。

遵循许多Git项目的约定,发行版与Git标签相关。您可以使用现有标签,也可以让发布版本在发布标签时创建标签。

在此处输入图片说明


1
是! 这是最简单的解决方案,可以从您的浏览器直接执行!1.从您的存储库主页中,选择releases2.单击提交编号。3.找到所需的文件,单击三个点...并选择View file4.单击View raw以下载文件!!!
乔纳森·本恩

3

这肯定可以。至少在Chrome中。右键点击“原始”图标-> 链接另存为


1
这将保存github页面的HTML文件,其中包括围绕该文件的github包装器。
Gregor Thomas

@Gregor-仅供参考,至少在TEXT页面上不应该。如有疑问,请左键单击“原始”图标。这应该在浏览器中打开文本文件,没有任何HTML。现在,在页面上的任意位置单击rt,然后执行“另存为...”。(或全选/复制,然后粘贴到任何您想要的位置)
ToolmakerSteve

3

要从Github存储库下载文件,请使用带有指向原始文件链接的'curl'命令。

curl https://raw.githubusercontent.com/user/repo/filename --output filename

添加--output选项,后跟新文件名,以将原始文件下载到新创建的文件中。


2
  1. 您链接到的页面回答了第一个问题。

  2. GitHub还具有用于发布之类的下载工具。

  3. Google Code根本没有Git

  4. GitHub,Google Code和SourceForge刚刚开始,是免费托管的。SourceForge可能仍会执行CVS


2

我最近发现了一个名为的服务gitzip,它也是开源的:

网站-http://kinolien.github.io/gitzip/

回购-https: //github.com/KinoLien/gitzip

访问以上站点,输入存储库或目录URL,您可以下载单个文件或整个目录作为zip文件。


但是,我如何jszip.min.js仅从该存储库下载?巨魔脸
Levi Fuller

在github中打开文件,然后转到raw。您应该看到文件的源代码,然后可以使用浏览器右键单击鼠标将其下载并另存为。这个对我有用。
鲍里斯(Boris)

2

现在,可以使用此google chrome扩展名下载存储库中的任何文件或任何特定文件夹:

适用于github的GitZip: 链接:https ://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn

用法:

  1. 在任何GitHub公共仓库页面中。
  2. 只需双击您需要的项目。
  3. 点击右下角的下载按钮。
  4. 查看进度仪表板,然后等待浏览器触发器下载。
  5. 获取ZIP文件。

在此处输入图片说明

在此处输入图片说明



1

如果您碰巧使用curl和Firefox,则可以使用cliget插件,该插件会生成一个curl调用,其中包括所有身份验证机制(也称为cookie)。

因此,右键单击rawcliget->“复制链接的链接网址”按钮,然后将其粘贴到外壳中。即使您必须登录才能查看文件,也可以获取文件。




0

或者试试这个

const https = require('https');
const fs = require('fs');
const DOMAIN = 'raw.githubusercontent.com';

function writeFile(data, fileName) {
  fs.appendFile(fileName, data.toString(), err => {
    if (err) {
      console.log('error in writing file', err);
    }
  });
}

function EOF(data) {
  console.log('EOF');
}

function getFileName(pathToFile) {
  var result = pathToFile.split('/');
  var splitLength = result.length;
  return result[splitLength - 1];
}
function getFile(branchName, username, repoName, ...pathToFile) {
  pathToFile.forEach(item => {
    const path = `/${username}/${repoName}/${branchName}/${item}`;
    const URL = `${DOMAIN}${path}`;
    const options = {
      hostname: DOMAIN,
      path: path
    };
    var fileName = getFileName(item);

    https
      .get(options, function(res) {
        console.log(res.statusCode);
        /* if file not found */
        if (res.statusCode === 404) {
          console.log('FILE NOT FOUND');
        } else {
          /* if file found */
          res.on('data', data => writeFile(data, fileName));
          res.on('end', data => EOF(data));
        }
      })
      .on('error', function(res) {
        console.log('error in reading URL');
      });
  });
}
getFile('master', 'bansalAyush', 'InstagramClone', '.babelrc', 'README.md');

0

我使用了以下格式,并且我认为通知此路径很重要。

https://github.com/user/repository/raw/branch/filename

^^^以上内容在我看来并不十分完整

https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true

有些人说raw.github.com或raw而不是blob,但是第二行对我有用,我希望能对其他人有所帮助...

2美分


0

您可以尝试github-files-fetcher,这是一个命令行工具,可以从GitHub存储库下载单个文件夹或文件。

考虑一下实际情况:您正在访问以下网页,并且想async单独下载子目录。

https://github.com/reduxjs/redux/tree/master/examples

对不起,不允许发布图片。

使用The github-files-fetcher,您应该首先复制该url页面的https://github.com/reduxjs/redux/tree/master/examples/async,然后在命令行中运行以下命令:

fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async


-2

这就是对我来说刚刚起作用的...

  1. 在单独的选项卡中打开原始文件。

  2. 将整个内容复制到记事本中的新文件中。

  3. 将文件保存在原来具有的扩展名中

使用我刚刚下载的php文件进行了测试(在回答时)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.