从远程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
这似乎还是有些过分。
从回购中获取多个文件呢?
当前回答
我使用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上进行了测试,两者都适用。
其他回答
我使用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上进行了测试,两者都适用。
如果有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 -
如果没有其他答案工作(即限制GitLab访问),您可以通过以下方式进行“选择性签出”:
git clone—no-checkout—depth=1—no-tags URL git恢复——分级的DIR-OR-FILE git校验DIR-OR-FILE
尽管这个解决方案100%兼容git,并且您可以签出目录,但与对文件执行wget/curl相比,它在磁盘和网络上都不是最优的。
下面是Jakub的回答。Git存档生成tar或zip存档,所以你需要通过tar管道输出以获得文件内容:
git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x
将在当前目录中保存远程存储库HEAD中的'filename'的副本。
:path/to/directory部分是可选的。如果排除,提取的文件将保存到<当前工作目录>/path/to/directory/filename
此外,如果你想在git-daemon托管的git存储库上启用git archive——remote,你需要启用守护进程。Uploadarch配置选项。参见https://kernel.org/pub/software/scm/git/docs/git-daemon.html
在git版本1.7.9.5中,这似乎可以从远程导出单个文件
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar xO
这将包含文件README.md的内容。