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

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

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

这似乎还是有些过分。

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


当前回答

在我看来,使用以下方法是最简单的:

wget https://github.com/name/folder/file.zip?raw=true

其他回答

使用实例远程导出单个文件。

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 -

如果你想从一个特定的散列+远程存储库中获取一个文件,我尝试过git-archive,但它不起作用。

你必须使用git克隆,一旦存储库克隆出来,你就必须使用git-archive来让它工作。

我发布了一个关于如何从远程的特定哈希在git存档中更简单地做到这一点的问题

如果您的存储库支持令牌(例如GitLab),那么为您的用户生成一个令牌,然后导航到您将下载的文件,并单击RAW输出以获得URL。下载文件使用:

curl --silent --request GET --header 'PRIVATE-TOKEN: replace_with_your_token' \
'http://git.example.com/foo/bar.sql' --output /tmp/bar.sql

如果你的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