如何通过命令行从私有 GitHub 存储库下载文件

Sim*_*one 2 ssh download git github curl

我想找到一种更简单的方法来从私有 GitHub 存储库获取文件。

我通过在 GitHub 上创建个人访问令牌来下载文件curl,然后像这样使用它:

curl https://MY_TOKEN@raw.githubusercontent.com/accountName/repoName/branchName/fileName.txt
Run Code Online (Sandbox Code Playgroud)

这对我有用,但是我想知道是否有更简单的方法,也许使用 SSH?我不介意输入 SSH 密码,因为它似乎比创建访问令牌更方便。我已经可以在 GitHub 上成功验证:

$ ssh -T git@github.com
# Attempts to ssh to GitHub
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用curlSSH URL 时,出现以下错误:

curl ssh://git@github.com:accountName/repoName/branchName/fileName.txt
curl: (3) URL using bad/illegal format or missing URL
Run Code Online (Sandbox Code Playgroud)

我尝试了本文中描述的其他一些方法,但无济于事。

有任何想法吗?

use*_*686 6

首先,curl 说“错误/非法格式”,因为您混合了 URL 样式和 rsh 样式地址格式。传统上,Git 接受两者git clone,但只有后者:在主机和路径 \xe2\x80\x93 之间放置一个 ,而在​​ URL 中,所有路径都以/. 例如,rsh/scp 样式的地址git@github.com:foo/bar将被写为 URL ssh://git@github.com/foo/bar,就像 HTTP URL 一样。

\n

SSH 本身并不是一个文件传输协议 \xe2\x80\x93 它更像是 TLS,可以承载各种文件传输协议,例如 SFTP 或 scp 或 rsync(很像 TLS 可以承载 HTTP)。为curl 提供一个ssh://URL 是没有意义的1,但您可以给它一个sftp://URL 以通过SFTP 检索文件。(请注意您链接的文章如何专门使用 SFTP。)

\n

但是,GitHub 不提供 SFTP 访问;通过 SSH 连接到 GitHub 唯一允许的是 Git 协议。这不是你可以使用curl 访问的东西,只能使用git clone.

\n

因此,如果您必须使用 SSH,那么 GitHub 的唯一选择就是通过 Git 克隆存储库。(可以使用--depth=--filter=选项来减少下载大小,但它最终仍然是整个存储库,而不仅仅是单个文件。)

\n\n

1(Git 使用 ssh:// URL,但含义从上下文 \xe2\x80\x93 中很清楚,它是 Git 协议,但通过 SSH 进行隧道传输。Git 不使用 SFTP。)

\n