从远程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
这似乎还是有些过分。
从回购中获取多个文件呢?
当前回答
我是这样解决的:
git archive --remote=ssh://git@gitlab.com/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name
如果你愿意,你可以用"BranchName"代替"HEAD"
其他回答
在我看来,这是一个解决方案:http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
git show HEAD~4:index.html > local_file
其中4表示从现在开始的四次修订,~是注释中提到的波浪号。
如果有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 -
我使用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上进行了测试,两者都适用。
关于@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选项。为了能够继续下载文件从你离开它,如果之前的意图失败在中间。
如果你的目标只是下载文件,有一个叫gget的轻松应用程序:
gget github.com/gohugoio/hugo 'hugo_extended_*_Linux-ARM.deb'
上面的例子将从hugo存储库下载单个文件。
https://github.com/dpb587/gget