获取 tarball!

获取 tarball!

我想创建一个 GitHub 存储库,其中包含我在此处发布的所有相关脚本作为答案。

但为了最终让用户使用起来简单,我想给他们一个命令,让他们直接从我的存储库下载脚本文件,而不必先安装gitgit clone整个存储库。

我知道我可以用来wget下载单个文件,但是当我使用文件的“原始”链接时(例如https://github.com/AskUbuntu-Answers/dupe-check/raw/master/dupe-check),该文件将获得默认umask权限,因此没有设置执行位。但我不希望用户仍然必须运行chmod +x

脚本文件已提交并以正确的执行位推送到存储库,当我使用它们git clone来获取整个存储库时,它们也会被保留。

从 GitHub 检索(有时自动执行)单个文件并保留其执行权限而无需安装git和克隆整个存储库的最简单方法是什么?

答案1

获取 tarball!

尽管 Github 没有在网站上公开这一点(显然他们很久以前就这么做了),它们提供tar.gz存储库的文件。

wget -qO - https://github.com/<user>/repo>/archive/master.tar.gz | tar zx --strip-components=1 <repo>-master/<filename>

<user>,,<repo>就是<filename>您所期望的。--strip-components用于防止tar创建以 repo 命名的目录。

所以:

$ wget -O - https://github.com/au-answers/dupe-check/archive/master.tar.gz | tar zx --strip-components=1 dupe-check-master/dupe-check
--2016-04-25 08:28:50--  https://github.com/au-answers/dupe-check/archive/master.tar.gz
Resolving github.com (github.com)... 192.30.252.128
Connecting to github.com (github.com)|192.30.252.128|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/au-answers/dupe-check/tar.gz/master [following]
--2016-04-25 08:28:51--  https://codeload.github.com/au-answers/dupe-check/tar.gz/master
Resolving codeload.github.com (codeload.github.com)... 192.30.252.160
Connecting to codeload.github.com (codeload.github.com)|192.30.252.160|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2470 (2.4K) [application/x-gzip]
Saving to: ‘STDOUT’

-                                                           100%[========================================================================================================================================>]   2.41K  --.-KB/s    in 0s      

2016-04-25 08:28:52 (21.5 MB/s) - written to stdout [2470/2470]

$ ll dupe-check 
-rwxr-xr-x 1 muru muru 7.5K Mar  5 21:46 dupe-check

我不认为这是一种特别友好的方式。chmod +x在我看来,另一种方式更好。

失败的尝试

拉上拉链!

您可以在 zsh 上进行替换以提取 Github repo 页面上链接的 zip 文件。幸运的是,Github 为 zip 文件添加了额外的元数据,以便保留权限。Ubuntuunzip上的 可以使用它来恢复权限。因此:

unzip -j =(wget -O - https://github.com/au-answers/dupe-check/archive/master.zip) dupe-check-master/dupe-check

不幸的是,=()这是 zsh 的东西。它创建一个适当的文件而不是 FIFO。Bash 没有等效的。<()始终是 FIFO。

Git 单个文件

你可以得到来自 repo 的单个文件使用git。然而,Github 不支持这个

答案2

我建议你使用 gists 而不是 git 存储库。存储库本质上应该是文件的集合。另一方面,Gists 是单个文件。像这样

wget https://gist.githubusercontent.com/SergKolo/d77dd46e9d936b5871e1829a2afd79c3/raw/726f39be5e0a939e06ed89239d2c350451b81316/get_unity_viewports.sh \
&& chmod +x ./get_unity_viewports.sh

但是如果你坚持使用存储库,而不是 1 个命令,请将 2 合并为 1。请记住,我们可以为代码指定解释器。

curl https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check  > dupe-check && python3 dupe-check

这就是它的运行方式

$ curl https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check\                                          
>   > dupe-check && python3 dupe-check
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7580  100  7580    0     0   6484      0  0:00:01  0:00:01 --:--:--  6489
Checked 1 files in total, 0 of them are duplicates by content.

相同wget

$ wget https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check && python3 dupe-check                     
--2016-04-24 21:17:35--  https://raw.githubusercontent.com/au-answers/dupe-check/master/dupe-check
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 23.235.44.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|23.235.44.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7580 (7.4K) [text/plain]
Saving to: ‘dupe-check.1’

100%[==================================================================================>] 7,580       --.-K/s   in 0s      

2016-04-24 21:17:36 (470 MB/s) - ‘dupe-check.1’ saved [7580/7580]

Checked 2 files in total, 2 of them are duplicates by content.
Here's a list of all duplicate files:

'dupe-check' (./dupe-check)
'dupe-check.1' (./dupe-check.1)

主题变奏

raw在 github 上右键点击按钮获取原始文件的 URL

wget https://github.com/au-answers/dupe-check/raw/master/dupe-check

相关内容