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

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

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

这似乎还是有些过分。

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


当前回答

在git版本1.7.9.5中,这似乎可以从远程导出单个文件

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

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

其他回答

如果您的存储库支持令牌(例如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

关于@Steven Penny的回答,我也使用wget。此外,为了决定将输出发送到哪个文件,我使用了-O。

如果你正在使用gitlabs, url的另一种可能是:

wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>

除非您有证书,或者从受信任的服务器访问所需的gitlabs安装——如@Kos所说,无需检查证书。我更喜欢这样,而不是修改。wgetrc,但这取决于你的需要。

如果它是一个大文件,你可以考虑在wget中使用-c选项。为了能够继续下载文件从你离开它,如果之前的意图失败在中间。

一般来说不是,但如果你使用Github:

对我来说,wget到原始url是下载一个特定文件的最佳和最简单的方法。

在浏览器中打开文件,点击“Raw”按钮。现在刷新浏览器,复制url并对其执行wget或curl操作。

wget的例子:

wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py

旋度的例子:

curl 'https://example.com/raw.txt' > savedFile.txt

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

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

这里有一些答案的微妙变化,回答了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