通过REST API或Ocktokit(Ruby)从GitHub抓取文件的最智能方式



这里是新的Git用户,在GitHub:中存储XML文档(每个文档表示报表的元数据)

#Repo: My-Reports
Report1
Report2
Report3 

我需要能够从repo中提取(不是Git意义上的)单个文件(如Report2)到任意客户端。能够提取带有特定标签的Report2是一项额外奖励。

我不想将repo克隆到客户端并执行真正的git pull,因为我不在此框上执行SCM,也不想安装二进制文件。我只需要这份文件。

我看到GitHub REST API有一个Get-Archive方法,它将下载整个回购的tarball/zipball:

 GET /repos/:owner/:repo/:archive_format/:ref

http://developer.github.com/v3/repos/contents/#get-档案链接

我想我可以走这条路,但这会迫使我自己管理"文档检索过程"(对解压缩档案并提取我需要的东西的任务进行编码)。如果可以的话,我想避免这种情况。。。。但据我所知,无论怎么要求,文档都会被压缩,我只需要接受它……就像我说的,Git&GitHub新手。

有没有更聪明/更好的方法来解决这个问题?我将使用Ruby,这样我也可以使用Ocktokit宝石。

非常感谢

查看octokit-gem,我建议您使用以下contents方法(例如使用我自己的repo,并演示了提取特定标签,但可以使用任何git引用):

require 'octokit'
require 'base64'
api_response = Octokit.contents 'neilslater/games_dice', 
  :ref => 'v0.0.1', :path => 'README.md'
text_contents = Base64.decode64( api_response.content )
File.open( 'README.md', 'wb' ) { |file| file.puts text_contents }

这仅限于最大大小为1MB的文件。注意,我已经跳过了字符编码可能出现的问题-如果你想处理内存中的text_contents,你需要知道要使用的正确编码,并应用它。在编写文件时,最简单的事情是在打开文件时添加"b"标志。

最新更新