从远程git存储库获取单个文件内容的最有效机制(就传输的数据和使用的磁盘空间而言)是什么?

到目前为止,我已经想出了:

git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

这似乎还是有些过分。

从回购中获取多个文件呢?


当前回答

如果没有其他答案工作(即限制GitLab访问),您可以通过以下方式进行“选择性签出”:

git clone—no-checkout—depth=1—no-tags URL git恢复——分级的DIR-OR-FILE git校验DIR-OR-FILE

尽管这个解决方案100%兼容git,并且您可以签出目录,但与对文件执行wget/curl相比,它在磁盘和网络上都不是最优的。

其他回答

如果你的Git存储库托管在Azure-DevOps (VSTS)上,你可以使用Rest API检索单个文件。

这个API的格式是这样的:

 https://dev.azure.com/{organization}/_apis/git/repositories/{repositoryId}/items?path={pathToFile}&api-version=4.1?download=true

例如:

 https://dev.azure.com/{organization}/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&download=true&api-version=4.1

在我看来,这是一个解决方案:http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html

git show HEAD~4:index.html > local_file

其中4表示从现在开始的四次修订,~是注释中提到的波浪号。

我用这个

$ 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版本1.7.9.5中,这似乎可以从远程导出单个文件

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar xO

这将包含文件README.md的内容。

如果你的目标只是下载文件,有一个叫gget的轻松应用程序:

gget github.com/gohugoio/hugo 'hugo_extended_*_Linux-ARM.deb'

上面的例子将从hugo存储库下载单个文件。

https://github.com/dpb587/gget