关于git:从GitHub下载单个文件

Download single files from GitHub

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

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

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

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

如果我们决定切换到Google代码,那么此处提供的功能是什么?

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


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

当您查看文件时,它具有指向"原始"版本的链接。 URL的构造如下

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

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

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

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

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


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

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

    <5233>

    所有这一切都必须在一条线上。 -O选项将文件保存在当前目录中。您可以使用-o filename指定不同的文件名。

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

    我也把它写成了一个要点:
    https://gist.github.com/madrobby/9476733


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

  • 单击GitHub仓库中的文件名。
  • 单击"原始"以显示该文件
    内容。
  • 在浏览器中复制URL。
  • 在命令行中,运行以下任一项:

    • 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 Mate可轻松下载单个文件,只需点击图标即可下载,目前它只适用于Chrome。

    GitHub Mate Download


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

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

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

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

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


    您可以这样使用curl

    <5233>

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


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


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

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

    有关详细信息,请访问此网站


    您应该使用文件的Raw URL来执行此操作。

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

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

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


    有一个名为Enhanced Github的chrome扩展

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

    enter image description here


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

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

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

    我希望有所帮助。


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

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

    We're excited to announce Releases, a workflow for shipping software to end users. Releases are first-class objects with changelogs and binary assets that present a full project history beyond Git artifacts.

    Releases are accompanied by release notes and links to download the software or source code.

    Following the conventions of many Git projects, releases are tied to Git tags. You can use an existing tag, or let releases create the tag when it's published.

    enter image description here


    这肯定会奏效。至少在Chrome中。右键单击"Raw"图标 - > Save Link As。


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

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

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

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


  • 您链接的页面回答第一个问题。

  • GitHub还有一个下载工具,用于发布版本。

  • Google Code根本没有Git。

  • GitHub,谷歌代码和SourceForge,刚刚开始,是免费托管。 SourceForge可能仍然会做CVS。


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

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

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


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

    因此,右键单击Raw按钮cliget - >"copy url for link",然后将其粘贴到shell中。即使您必须登录才能看到它,您将获得您的文件。


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

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

    用法:

  • 在任何GitHub公共转发页面。
  • 只需双击您需要的项目即可。
  • 单击右下角的下载按钮。
  • 查看进度仪表板并等待浏览器触发器下载。
  • 获取ZIP文件。
  • enter image description here

    enter image description here


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

    git文件

    生的


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


  • 在"克隆在桌面"下方的右侧,它说"下载Zip文件"
  • 下载Zip文件
  • 提取文件

  • 或试试这个

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    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');

    我使用以下格式,我觉得告知路径非常重要。

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

    ^^^以上在我的脑海里并不是很完整

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

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

    2¢


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

    想一个真实的场景:您正在访问以下网页页面并想单独下载async子目录。

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

    sorry for not being allowed to post images.

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

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


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

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

  • 将所有内容复制到记事本中的新文件中。

  • 将文件保存在原来的扩展名中

  • ...刚刚为我的DL工作.php文件。