【问题标题】:Download single files from GitHub从 GitHub 下载单个文件
【发布时间】:2011-06-04 00:43:09
【问题描述】:

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

我不想要显示原始文件的 URL;如果是二进制文件,那是没有用的。

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

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

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

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

【问题讨论】:

  • 对于 GitLab,请参阅 stackoverflow.com/a/51993087/6309
  • 这对每个人都不起作用,但如果你使用 python pandas,你可以简单地做这样的事情(也适用于大文件):点击“查看原始文件”,然后从浏览器复制 url,然后简单地做这个:df = pd.read_csv('raw.githubusercontent.com/t-davidson/…')
  • 试试 Gitzip for github 的 chrome
  • 这是最简单的命令行答案当然unix.stackexchange.com/questions/228412/…。使用wget full_url_to_raw_file_on_github
  • 654 人提出了这个问题(赞成),这意味着 GitHub 有一个需要解决的主要 UI 问题。点击旁边的复选框并选择“下载”。哦,不存在吗?多么荒谬。 (哦,另外,考虑到有人来此页面寻找答案的 962,000 次!为一项功能获得一百万次页面浏览量会很好,错误?不)

标签: git github url download version-control


【解决方案1】:
  1. 转到您要下载的文件。
  2. 单击它可查看 GitHub UI 中的内容。
  3. 在右上角,右键单击Raw按钮。
  4. 另存为...

【讨论】:

  • 复制 URL,而不是“另存为”。那是文件的URL。您现在可以使用任何使用 URL 下载的工具来下载它:wget、您的浏览器等。
  • @MattParkins 我刚刚尝试过,我认为它现在适用于大文件(即使是带有“我们现在无法显示这么大的文件”警告的二进制文件)
  • 这适用于单个 C# 文件。也许github应该添加另一个下载按钮。右键单击按钮不是很直观。
  • 非常适合大多数源代码文件,因为它们很少超过大小阈值。
  • 只是一个提醒。复制原始文件的 URL,即在单击原始选项之后。
【解决方案2】:

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

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

【讨论】:

  • 后人注意:我刚刚对其进行了测试,并且对二进制文件使用 raw 效果很好。
  • 建议的 URL 格式不适合我。我发现https://raw.github.com/user/repository/branch/filename 有效。
  • @BrianC.:(至少截至 2013 年 8 月 27 日)答案中提到的 URL 格式(存储库名称后的raw)现在自动重定向到您提到的格式(主机名 @987654334 @)。如有疑问,请浏览 github.com 上的相关文件,然后单击“原始”按钮。
  • 如果你还想使用 curl,请在命令行中使用 -L 选项进行重定向: curl -L -O github.com/user/repository/raw/branch/filename
  • 这还能用吗?我已经这样做了好几个月了……但最近几周发生了一些变化。现在我必须在末尾包含令牌,否则在从raw.githubusercontent.com 下载文件时会得到 404.... 用于通过下载请求发送身份验证时工作。
【解决方案3】:

转到DownGit - 输入您的网址 - 只需下载

无需安装任何东西或遵循复杂的说明;特别适合大型源文件。



您可以将单个文件和目录下载为 zip,也可以创建下载链接。

免责声明:我是此工具的作者。

【讨论】:

    【解决方案4】:

    您可以使用 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 令牌,follow these instructions

    我也写成a gist

    【讨论】:

    • 这个不错,可惜它只支持最大 1 MiB 的文件。
    • 如果在程序中执行此操作,请确保设置了 User-Agent。
    • 你能举一些路径的例子吗?如果您的 repo 是 my-repo 并且您想要获取的文件位于 x/y/z.txt 那么 URL 将是......很难弄清楚 /owner/repo/ 应该由我填写。谢谢。
    • 这工作正常,但有一个缺点。您并不总是最新版本的文件。尝试对文件进行修改,不要等待太多并尝试使用此方法检索文件。您将只获得以前的版本。
    • 支持 -O 标志,因为这是从公共仓库下载时最简单的方法
    【解决方案5】:

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

    1. 单击 GitHub 存储库中的文件名。
    2. 单击 Raw 显示文件 内容。
    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

    【讨论】:

    • 在查看 github 存储库中的文件并单击 Raw 按钮后,我使用了 wget 后跟我想要的 C 源文件的原始路径。在我的 Raspberry Pi 3 上使用 Raspbian 像冠军一样工作。
    • 我玩游戏有点晚了,但这对我来说非常有效。查看原始内容然后右键单击下载不适用于我的情况,因为我需要特定格式的文件,而我的计算机不提供这种格式。此答案中的命令按原样下载所有内容。
    【解决方案6】:

    你可以这样使用curl

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

    O 表示 curl 下载内容
    L 表示 curl 跟随重定向

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 一些文件托管在 raw.githubusercontent.com
      • 有时它是 raw2.github.com 仅供参考
      【解决方案8】:

      GitHub Mate 让单个文件下载不费吹灰之力,点击图标即可下载,目前只支持Chrome。

      【讨论】:

      • @jcollum 刚刚检查过,对我有用。你能确定你使用的是最新版本吗?或让我知道错误。很高兴帮助您实现它。
      • 我使用的是最新版本的 Chrome,34.0.1847.116,这肯定行不通。您使用什么操作系统?我在 OS X Mavericks 上。
      • 我在 Windows 7 和 OS X Mavericks 的 Chrome 34 上进行了测试,两者都可以工作。如果不工作很奇怪吧?请注意,该文件夹不可下载。也许你可以在不同的机器上试试。
      • 好的,该方法仅在您有 chrome 扩展程序时才有效。 chrome.google.com/webstore/detail/github-mate/…
      • 从此视图中,只需右键单击并另存为文件
      【解决方案9】:

      2019年总结

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

      下面总结了六个选项。对于那些喜欢更实际的解释的人,我制作了一个 YouTube 视频:Download Individual Files and Folders from GitHub

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


      1. GitHub 用户界面

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

      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,然后按 Enter。

      5.卷曲

      • 您需要安装 cURL。转到 GitHub.com 上的文件,左键单击“Raw”按钮以获取直接文件链接,复制此 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)。但是,这种方法对于单个文件并不是那么有用(您更有可能使用它来下载特定文件夹,如我上面链接的答案中所述)。

      【讨论】:

      【解决方案10】:

      有一个名为Enhanced Github的chrome扩展

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

      【讨论】:

      • 这比 Github Mate 更好,仅仅是因为它不要求“阅读所有浏览历史”权限!请记住右键单击下载按钮>将链接另存为。
      • 需要从你的GitHub账号添加token。
      • 使用安全吗?
      • @Ariansaputra 我已经使用它很长时间了,从未遇到任何问题。它应该是安全的。我不明白为什么它不会是
      【解决方案11】:

      如果您想使用 wgetgithub 下载 zip 文件

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

      查看website了解更多详情

      【讨论】:

      • 您可以下载任何文件,而不仅仅是 .zip。
      【解决方案12】:

      要跟进 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

      【讨论】:

      • 你能举一些路径的例子吗?如果您的 repo 是 my-repo 并且您想要获取的文件位于 x/y/z.txt 那么 URL 将是...谢谢
      • @Gray https://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
      • 如果我想从分支下载文件?我该怎么做?
      【解决方案13】:

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

      让我们谈谈 CSV 文件。如果您想下载 CSV 文件:

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

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

      希望对你有帮助。

      【讨论】:

        【解决方案14】:

        GitHub 发布功能

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

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

        我们很高兴地宣布发布,这是一种将软件交付给最终用户的工作流程。发布是一流的对象,带有变更日志和二进制资产,呈现了 Git 工件之外的完整项目历史。

        版本附有版本说明和下载软件或源代码的链接。

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

        【讨论】:

        • 是的!这是最简单的解决方案,可以直接从您的浏览器中完成! 1. 从您的存储库主页中,选择releases 2. 单击提交号。 3.找到你要的文件,点击三个点...并选择View file 4.点击View raw下载文件!!!
        【解决方案15】:

        您应该使用文件的raw URL 来完成。

        例如下载AFNetworking的README:

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

        由于它是一个公共回购,您不需要任何凭据。 请注意url的种类:raw.githubusercontent.com/path/to/file

        【讨论】:

        • 此代码似乎不是 R 或终端。将在哪里使用此代码?
        • 实际上是一个基于curl的终端命令和&gt;的输出重定向
        【解决方案16】:
        1. 在github上,打开你要下载的文件
        2. 找到与“责备”按钮相邻的“原始”按钮
        3. 按键盘上的“Alt”并同时单击鼠标左键
        4. 文件将自动以“.txt”格式下载(对我有用)
        5. 手动将“.txt”扩展名更改为“.csv”扩展名

        这对我有用,我希望它也对你有用。

        【讨论】:

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

          【讨论】:

          • 我收到“zsh: command not found: wget”
          • @BrendanMetcalfe 是因为你没有包 wget。先安装
          【解决方案18】:

          2021 年,GitHub 添加了一项新功能,即直接在 Web 上打开 Visual Studio 代码。当您在任何存储库中时,只需按句号键 . 即可启动它。

          因此,要下载任何特定文件,您可以通过按 . 键启动 vscode,然后它将在 vscode 中显示存储库的所有文件,您可以通过 right click > dowload 下载所需的任何文件。

          【讨论】:

            【解决方案19】:

            这肯定行得通。至少在 Chrome 中。右键单击“Raw”图标 -> 将链接另存为

            【讨论】:

            • 这会保存 github 页面的 HTML 文件,其中包括文件周围的 github 包装器。
            • @Gregor - 仅供参考,它不应该,至少对于 TEXT 的页面。如果有疑问,左键单击“原始”图标。这应该在浏览器中打开文本文件,没有任何 HTML。现在 rt-单击页面上的任意位置,然后执行“另存为...”。 (或者做全选/复制,然后粘贴到任何你想要的地方)
            【解决方案20】:

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

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

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

            【讨论】:

              【解决方案21】:
              1. 您链接到的页面回答了第一个问题。

              2. GitHub 还有一个下载工具,用于发布版本等内容。

              3. Google Code 根本没有Git

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

              【讨论】:

                【解决方案22】:

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

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

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

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

                【讨论】:

                • 但我如何只从该存储库下载jszip.min.js巨魔脸
                • 在 github 中打开文件,然后转到 raw。您应该会看到该文件的源代码,然后您可以使用浏览器右键单击鼠标下载它并另存为。它对我有用。
                【解决方案23】:

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

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

                用法:

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

                【讨论】:

                  【解决方案24】:

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

                  git file

                  raw

                  【讨论】:

                  【解决方案25】:

                  如果您碰巧使用 curl 和 firefox... 您可以使用 cliget 插件,它会生成包含所有身份验证机制(又名 cookie)的 curl 调用。

                  所以右键单击raw 按钮cliget->“复制链接的url”,然后将其粘贴到外壳中。即使您必须登录才能查看文件,您也会得到文件。

                  【讨论】:

                    【解决方案26】:

                    转到脚本并点击“Raw”

                    然后复制链接,用aria2c链接下载。

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

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

                    只需将链接修改为 https://raw.githubusercontent.com/kodamail/gscript/master/color.gsf

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

                    可以和aria2c、wget或者curl一起使用,我这里用的是aria2c。

                    【讨论】:

                      【解决方案27】:

                      我的简单方法是:

                      1. 点击“Raw”按钮,获取浏览器上显示的 github_csv.csv 文件内容。
                      2. 然后创建 file.csv 并在记事本等文本编辑器中打开它
                      3. 然后从网站复制文件内容并粘贴到file.csv中
                      4. 你的 file.csv 是 github_csv.csv

                      【讨论】:

                        【解决方案28】:
                        1. 在右侧“在桌面中克隆”下方显示“下载 Zip 文件”
                        2. 下载压缩文件
                        3. 解压文件

                        【讨论】:

                        • 有没有什么办法可以让你拥有 lfs 文件的内容?
                        【解决方案29】:

                        对于使用 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

                        【讨论】:

                          【解决方案30】:

                          或者试试这个

                          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');
                          

                          【讨论】:

                            猜你喜欢
                            • 2020-09-12
                            • 2013-02-01
                            • 2013-07-24
                            • 1970-01-01
                            • 1970-01-01
                            • 2013-04-16
                            • 2016-01-09
                            • 2013-11-13
                            相关资源
                            最近更新 更多