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

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

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

这似乎还是有些过分。

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


当前回答

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

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

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

其他回答

对于单个文件,只需使用wget命令。

首先,按照下面的图片点击“raw”来获取url,否则你将下载嵌入html中的代码。

然后,浏览器将打开一个新页面,url以https://raw.githubusercontent.com/开头…

只需在终端输入命令:

#wget https://raw.githubusercontent.com/...

一会儿文件就会放在你的文件夹里。

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

如果有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 -

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

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

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

https://github.com/dpb587/gget

下面两个命令对我来说很有用:

Git存档——remote={remote_repo_git_url} {branch} {file_to_download} -o {tar_out_file}

从远程存储库的分支(url为remote_repo_git_url)下载file_to_download作为tar归档文件,并存储在tar_out_file中

Tar -x -f {tar_out_file}.tar从tar_out_file中提取file_to_download文件