从GitHub下载单个文件

时间:2011-01-05 13:41:16

标签: git version-control github

我猜大多数人,开发人员,使用任何VCS,我希望你们中的一些人使用Git。您是否有任何提示或技巧如何获取存储库中单个文件的下载URL?

我不想要显示原始文件的URL;在二进制文件的情况下它是无用的。

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

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

如果我们决定切换到Google代码,这里提到的功能是什么?

或者是否有开源项目的免费托管和VCS?

32 个答案:

答案 0 :(得分:491)

Git不支持下载部分存储库。你必须下载所有这些。但你应该能够用GitHub做到这一点。

当您查看文件时,它有一个指向“原始”版本的链接。 URL的构造如此

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

通过填写网址中的空白,您可以使用WgetcURL(使用-L选项,请参阅下文)或任何下载单个文件的内容。同样,你不会通过这样做获得Git使用的任何漂亮的版本控制功能。

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

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

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

答案 1 :(得分:465)

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

答案 2 :(得分:35)

您可以使用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

答案 3 :(得分:16)

根据this gist,您可以使用wget或cURL:

  1. 单击GitHub存储库中的文件名。
  2. 单击“原始”以显示该文件 内容。
  3. 在浏览器中复制网址。
  4. 在命令行中,运行以下任一项:
    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

答案 4 :(得分:14)

GitHub Mate轻松下载单个文件,只需点击图标进行下载,目前只能在Chrome上使用。

GitHub Mate Download

答案 5 :(得分:12)

现在可以在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就是一个很好的例子。

答案 6 :(得分:10)

您可以这样使用curl

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

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

答案 7 :(得分: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

答案 8 :(得分:8)

如果您想使用github

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

有关详细信息,请参阅此website

答案 9 :(得分:5)

您应该使用文件的raw网址。

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

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

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

答案 10 :(得分:4)

此方法适用于Windows,因为我从未使用过MAC,因此我不知道MAC中的备用键是什么,我将在下面提到。

我们来谈谈CSV文件。如果您要下载CSV文件:

  1. 转到要下载的特定数据集,然后单击它。
  2. 您将在数据集的右上角看到“原始”按钮。
  3. 按“Alt”,然后左键单击“原始”按钮。
  4. 整个CSV将在您的系统中下载。
  5. 记住,你必须按Alt并同时左键单击。只需单击“原始”按钮,即可在浏览器中打开CSV。

    我希望有所帮助。

答案 11 :(得分:4)

有一个名为Enhanced Github的Chrome扩展程序

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

enter image description here

答案 12 :(得分:3)

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

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

  

我们很高兴地宣布Releases,一个向最终用户发送软件的工作流程。发布是具有更改日志和二进制资产的一流对象,它们提供了超出Git工件的完整项目历史记录。

     

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

     

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

enter image description here

答案 13 :(得分:3)

这肯定有用。至少在Chrome中。右键单击“Raw”图标 - &gt; 将链接另存为

答案 14 :(得分:2)

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

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

repo - https://github.com/KinoLien/gitzip

访问上述网站,输入repo或目录URL,您可以将单个文件或整个目录下载为zip文件。

答案 15 :(得分:2)

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

  2. GitHub还有一个下载工具,用于发布。

  3. Google Code根本没有Git

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

答案 16 :(得分:2)

  1. 简单地复制页面链接
  2. 在命令行输入:wget -L (exact copied link)
  3. 只需在步骤 2
  4. 中将 blob 替换为 raw
  5. 输入

答案 17 :(得分:1)

如果您碰巧使用curl和firefox ......您可以使用cliget加载项生成卷曲调用,包括所有身份验证机制(也称为cookie)。

右键单击raw按钮cliget-&gt;“copy url for link”,然后将其粘贴到shell中。即使您必须登录才能看到它,您将获得您的文件。

答案 18 :(得分:1)

现在可以使用此Google Chrome扩展程序下载存储库中的任何文件或任何特定文件夹:

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

用法:

  1. 在任何GitHub公共转发页面中。
  2. 只需双击您需要的物品。
  3. 点击右下方的下载按钮。
  4. 查看进度仪表板并等待浏览器触发器下载。
  5. 获取ZIP文件。
  6. enter image description here

    enter image description here

答案 19 :(得分:1)

要从Github存储库下载文件,请使用&#39; curl&#39;带有原始文件链接的命令。

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

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

答案 20 :(得分:1)

我最简单的方法是:

  1. 单击“原始”按钮以获取浏览器中显示的github_csv.csv的文件内容。
  2. 然后创建file.csv并在文本编辑器(如记事本)中将其打开
  3. 然后从网站复制文件内容并将其粘贴到file.csv
  4. 您的file.csv是github_csv.csv

答案 21 :(得分:1)

  1. 在github上,打开要下载的文件
  2. 将“ Raw”按钮定位在“ Blame”按钮旁边
  3. 按下键盘上的“ Alt”,然后同时在鼠标上单击鼠标左键
  4. 该文件将自动以“ .txt”格式下载(对我来说确实如此)
  5. 手动将“ .txt”扩展名更改为“ .csv”扩展名

这对我有用,我希望对您也有用。

答案 22 :(得分:1)

2019摘要

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

以下总结了六个选项。对于那些更喜欢动手做解释的人,我整理了一个YouTube视频:Download Individual Files and Folders from GitHub

此外,我为需要从GitHub下载单个文件夹/目录(而不是文件)的用户发布了similar answer on StackOverflow


1。 GitHub用户界面

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

2。浏览器上下文菜单

  • 转到GitHub上的文件,右键单击“原始”按钮以打开浏览器的上下文菜单。从那里开始,如果您使用的是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,然后按Enter。

5。 cURL

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

6。 GitHub API

  • 这实际上是DownGit在幕后使用的。使用GitHub's 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相同)。但是,此方法对单个文件并不是很有用(如我在上面链接的答案中所述,您更有可能将其用于下载特定文件夹)。

答案 23 :(得分:1)

我认为新的 url 结构为 raw.giturl ,例如:

<强> git file

<强> raw

答案 24 :(得分:0)

如果您使用 npm,只需运行以下命令行,最后,它不会下载除此 github 文件之外的任何 npm

npx config-pack https://github.com/facebook/react/blob/main/README.md

查看config-pack了解更多详情

答案 25 :(得分:0)

转到脚本,然后单击“原始”

然后复制链接并使用aria2c链接下载。

例如:aria2c https://raw.githubusercontent.com/kodamail/gscript/master/color.gsf

Trick:我要下载的文件是 https://github.com/kodamail/gscript*/blob*/master/color.gsf

只需将链接修改为 https:// 原始。github用户内容 .com / kodamail / gscript / master / color.gsf

删除斜体文本并以相同格式添加粗体文本,它将为您提供正确的链接。

可以与aria2c,wget或curl一起使用,我在这里使用了aria2c。

答案 26 :(得分:0)

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

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

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

  

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

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

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

答案 27 :(得分: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,但是第二行对我有用,我希望能对其他人有所帮助...

答案 28 :(得分: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');

答案 29 :(得分:0)

  1. 在“Clone in Desktop”下方的右侧,它说是“Download Zip file”
  2. 下载Zip文件
  3. 解压缩文件

答案 30 :(得分:0)

对于使用GitHub Enterprise的用户,您需要在以下方案中构建URL

Invoke-WebRequest http://github.mycompany.com/api/v3/repos/my-org/my-repo/contents/myfiles/file.txt -Headers @{"Authorization"="token 8d795936d2c1b2806587719b9b6456bd16549ad8"}

详情可在此处找到

http://artisticcheese.blogspot.com/2017/04/how-to-download-individual-files-from.html

答案 31 :(得分:-2)

这对我来说现在很有用......

  1. 在单独的标签页中打开原始文件。

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

  3. 将文件保存在原来的扩展程序中

  4. ...刚刚在我的DL工作.php文件。