从远程git存储库获取单个文件内容的最有效机制(就传输的数据和使用的磁盘空间而言)是什么?
到目前为止,我已经想出了:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
这似乎还是有些过分。
从回购中获取多个文件呢?
从远程git存储库获取单个文件内容的最有效机制(就传输的数据和使用的磁盘空间而言)是什么?
到目前为止,我已经想出了:
git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
这似乎还是有些过分。
从回购中获取多个文件呢?
当前回答
这是特定于托管在GitHub上的git回购
尝试Github的命令行应用程序gh的“api”命令,对Github的“获取存储库内容”端点进行身份验证调用。
基本命令是:
$gh api /repos/{owner}/{repo}/contents/<path_to_the_file>
作为额外的奖励,当您从包含您试图从中获取文件的repo副本的目录中执行此操作时,{owner}和{repo}部分将自动填充。
https://docs.github.com/en/rest/reference/repos#get-repository-content
响应将是一个JSON对象。如果<path_to_the_file>确实指向一个文件,JSON将包括一个'size', 'name',几个访问文件的url字段,以及一个'content'字段,这是文件内容的base64编码版本。
要获得文件内容,你可以卷曲“download_url”的值,或者只是解码“content”字段。你可以通过管道base64命令来做到这一点,就像这样:
$gh api /repos/{owner}/{repo}/contents/<path-to-the-file> --jq '.content' | base64 -d
其他回答
我使用curl,它与公共回购或通过web界面使用https基本身份验证的人一起工作。
curl -L——retry 20——retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
我在github和bitbucket上进行了测试,两者都适用。
我用这个
$ cat ~/.wgetrc
check_certificate = off
$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
使用实例远程导出单个文件。
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
这将下载文件README。Md到当前目录。
如果你想把文件的内容导出到STDOUT:
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO
可以在命令末尾提供多个路径。
如果有web界面部署(如gitweb, cgit, Gitorious, ginatra),你可以使用它来下载单个文件('raw'或'plain'视图)。
如果其他方启用了它,你可以使用git存档的'——remote=<URL>'选项(可能限制它到给定文件所在的目录),例如:
$ git archive --remote=git@github.com:foo/bar.git --prefix=path/to/ HEAD:path/to/ | tar xvf -
这里有一些答案的微妙变化,回答了OP的问题:
git archive --remote=git@archive-accepting-git-server.com:foo/bar.git \
HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt