1

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

#Repo: My-Reports

Report1
Report2
Report3 

我需要能够将(不是 Git 意义上的)单个文件(如 Report2)从 repo 拉到任意客户端。能够使用特定标签提取 Report2是一种奖励。

我不想将 repo 克隆到客户端并做一个真实git pull的,因为我没有在这个盒子上做 SCM,也不想安装二进制文件。我只需要文件,句号。

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

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

http://developer.github.com/v3/repos/contents/#get-archive-link

我想我可以走这条路,但它会迫使我自己管理“文档检索过程”(编码解压缩档案并提取我需要的任务)如果可以的话,我想避免这种情况...... .但据我所知,无论如何要求,文档都会被压缩,我只需要忍受它......就像我说的那样,Git & GitHub newb。

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

非常感谢

4

1 回答 1

4

查看octokitgem,我建议您使用以下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'标志。

于 2013-07-23T11:58:16.160 回答