从GitHub repo下载单个文件有哪些技巧?

我不想要显示原始文件的URL;对于二进制文件,什么都没有。

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

是否有可能将GitHub用作“下载服务器”?

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

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


您链接到的页面回答了第一个问题。GitHub还提供了一个下载工具,用于发布等内容。谷歌代码根本没有Git。GitHub、Google Code和SourceForge是免费托管。SourceForge可能仍然会做CVS。


Git不支持下载部分存储库。你必须下载所有这些。但你应该能够使用GitHub完成这项工作。

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

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

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

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

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

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


转到要下载的文件。单击它可查看GitHub UI中的内容。在右上角,右键单击“原始”按钮。另存为。。。


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

git文件

raw


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


GitHub Mate可以轻松下载单个文件,只需单击图标即可下载,目前它只能在Chrome上运行。


您可以使用V3API获取如下原始文件(需要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令牌,请遵循以下说明。

我也把这个写下来作为要点。


这就是我刚才所做的。。。

在单独的选项卡中打开原始文件。将整个内容复制到记事本中的新文件中。将文件保存为原来的扩展名

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


在“桌面中的克隆”的右侧,它显示“下载Zip文件”下载Zip文件提取文件


如果你碰巧用卷发和萤火虫。。。您可以使用cliget插件,它生成一个curl调用,包括所有身份验证机制(也称cookie)。

因此,右键单击原始按钮cliget->“复制链接的url”,然后将其粘贴到外壳中。即使你必须登录才能看到文件,你也会得到它。


为了跟进thomasfuchs所说的,但对于GitHub Enterprise用户,您可以使用以下内容。

curl-H'授权:令牌INSERTACCESSTOKENHERE'-H'接受:application/vnd.github.v3.raw'-O-Lhttps://your_domain/api/v3/repos/owner/repo/contents/path

这里还有API文档https://developer.github.com/v3/repos/contents


这肯定会奏效的。至少在Chrome中。右键单击“原始”图标->将链接另存为。


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

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

有关详细信息,请参阅此网站


您应该只使用文件的原始URL进行操作。

例如,下载AFNetworking的README:

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

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


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

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

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

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


GitHub发布功能

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

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

我们很高兴宣布发布,这是一个向最终用户发送软件的工作流。发布是具有变更日志和二进制资产的一级对象,它们展示了Git工件之外的完整项目历史。发行版附带发行说明和下载软件或源代码的链接。按照许多Git项目的惯例,发布与Git标签绑定。您可以使用现有标记,或在发布标记时让发布者创建标记。


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

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

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

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

我希望这有帮助。


对于使用GitHub Enterprise的用户,您需要按照以下方案构造URL

调用WebRequesthttp://github.mycompany.com/api/v3/repos/my-org/my-repo/contents/myfiles/file.txt-标头@{“Authorization”=“token 8d795936d2c1b2806587719b9b6456bd16549ad8”}

详细信息可在此处找到

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


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

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

用法:

在任何GitHub公共repo页面中。只需双击所需的项目。单击右下角的下载按钮。查看进度仪表板并等待浏览器触发器下载。获取ZIP文件。


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

单击GitHub repo中的文件名。单击“原始”以显示文件目录在浏览器中复制URL。在命令行中,运行以下任一命令:wget—无检查证书—内容处置https://URL-from-step3/卷曲-LJOhttps://URL-from-step3/再一个:在RHEL7.6中,运行以下命令:wget公司https://URL-from-step3/--输出文档=FILE_NAME


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

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

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


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

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



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

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


或者试试这个

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

可以这样使用curl:

卷曲-OLhttps://raw.githubusercontent.com/<username>/<repo名称>/<branch名称>/path/to/file

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


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

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

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

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

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


您可以尝试github文件获取器,它是一个命令行工具,可以从github repo下载单个文件夹或文件。

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

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

很抱歉不能发布图片。

使用github文件获取器,您应该首先复制该页面的urlhttps://github.com/reduxjs/redux/tree/master/examples/async,然后在命令行中运行以下命令:

提取器--url=https://github.com/reduxjs/redux/tree/master/examples/async


有一个名为Enhanced Github的chrome扩展

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


2019年总结

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

下面总结了六个选项。对于那些喜欢更实际的解释的人,我制作了一个YouTube视频:从GitHub下载个人文件和文件夹。

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


1.GitHub用户界面

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

2.浏览器上下文菜单

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

3.第三方工具

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

4.子版本

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

5.cURL

您需要安装cURL。转到GitHub.com上的文件,左键单击“Raw”按钮进入直接文件链接,复制此URL,打开终端,导航到要下载内容的目录,键入以下命令,将文件名替换为您想命名的名称,并将URL替换为您刚才复制的名称:curl-o parse.jshttps://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上,打开要下载的文件找到与“Blame”按钮相邻的“Raw”按钮按下键盘上的“Alt”,同时左键单击鼠标该文件将以“.txt”格式自动下载(我就是这样做的)手动将“.txt”扩展名更改为“.csv”扩展名

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


转到脚本并单击“原始”

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

例如:aria2chttps://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。


我的简单方法是:

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


简单复制页面链接在命令行中键入:wget-L(精确复制的链接)只需在步骤2中将blob替换为raw进来


若您使用npm,只需运行以下命令行,最后,除了这个github文件,它不会下载任何npm包

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

有关详细信息,请参阅配置包


2021,GitHub增加了一项新功能,即在web上打开visual studio代码。只需按句号或周期键即可启动。,当您在任何存储库中时。

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


在Mac或Linux上安装jq并使用它从Github中提取文件,如下所示:

curl -H 'Authorization: token <ACCESS_TOKEN>' \
   -H "Accept: application/vnd.github.v3+raw" -L \
   https://api.github.com/repos/MY-ORG/MY-REPO/contents/MY-FILE-PATH | \
   jq -r '.content' | base64 --decode > MY_FILE_NAME.txt

可以在此处找到上述命令的文档。


I.如果您想下载.so之类的文件而不是源代码,请尝试单击下面的下载按钮:

该文件将从您的浏览器下载。

二、如果您想下载源代码,请单击“原始”,然后转到“原始”。。页

简单地复制/粘贴或使用curl或wget命令在终端中获取它。


您可以复制GitHub文件的内容,然后将其粘贴到文件中。简单!


只需将wget与raw=True参数一起使用

wget "https://github.com/user/repository/blob/master/directory/file_name?raw=True" -O target_path/file_name

请使用“{host}/{user}/}repo}/branch}/{file}”的模式。要获得具体示例,请在Python中执行以下操作:

import pandas as pd
host = 'raw.github.com'
user = 'fivethirtyeight'
repo = 'data'
branch = 'master'
file = 'births/US_births_2000-2014_SSA.csv'
url = f'https://{host}/{user}/{repo}/{branch}/{file}'
df = pd.read_csv(url,sep=',',header=0)
df.head()