从远程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版本1.7.9.5中,似乎可以使用以下方法从远程仓库中导出单个文件
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar xO
这将会显示文件README.md
的内容。
| tar -x
。
新的命令为:git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
另外需要翻译的内容是:cat README.md
- reniertar -xO
将输出定向到标准输出流,以便进行管道操作。例如:FILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
。 - paulcm在跟进Jakub的答案后,需要通过管道将git archive
的输出传递给tar以获取文件内容:
git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x
将远程仓库HEAD版本的'filename'文件保存到当前目录。
:path/to/directory
部分是可选的。如果省略,则获取的文件将保存在 <current working dir>/path/to/directory/filename
此外,如果您想要在由git-daemon托管的Git仓库上启用git archive --remote
使用,请启用daemon.uploadarch配置选项。参见https://kernel.org/pub/software/scm/git/docs/git-daemon.html
tar -x
中添加 v
作为另一个选项不会有影响。
此外,值得注意的是,它也适用于特定文件夹,而不仅仅是单个文件:
git archive --remote=git://git.foo.com/project.git HEAD path/to/folder/ | tar -xv
- M-Jack--remote=<URL>
'选项(可能限制为给定文件所在的目录),例如:$ git archive --remote=git@github.com:foo/bar.git --prefix=path/to/ HEAD:path/to/ | tar xvf -
git config daemon.uploadarch true
命令来启用"upload-archive"。默认情况下,git-daemon禁用远程归档功能,并显示“fatal: remote error: access denied or repository not exported: …”错误信息。 - patthoytsgit archive
方法是我第一次尝试的 - 但后来我注意到,在客户机上需要 tar
不太方便 Windows 用户。我们最终从本地的 cgit
服务器获取。它可以工作,但速度不如我所希望的快(并且仍然需要在 Windows 机器上运行 unix2dos
或类似程序,因为我们在 Git 存储库中存储具有 Unix 行结尾的文件)。 - Frerich Raabe一般情况下不适用,但如果您正在使用Github:
对我来说,使用wget
下载特定文件是最好、最简单的方法。
在浏览器中打开该文件并点击“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示例:
curl 'https://example.com/raw.txt' > savedFile.txt
curl https://example.com/raw.txt > savedFile.txt
- JacobPariseaucurl 'https://raw.githubusercontent.com/SoliDry/api-generator/master/tests/functional/oas/openapi.yaml' > openapi_test.yaml
它也可以通过UI按钮“raw”轻松访问。 - Arthur Kushman从远程导出单个文件:
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
您可以在命令的结尾提供多个路径。如果其他回答都不适用(即受限的GitLab访问),您可以通过“selective-checkout”进行选择性检出:
git clone --no-checkout --depth=1 --no-tags URL
git restore --staged DIR-OR-FILE
git checkout DIR-OR-FILE
虽然这种解决方案完全符合Git规范,而且可以检出目录,但与对文件进行wget/curl相比,它在磁盘和网络方面不够优化。
我是这样解决的:
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
我认为这是一个解决方案:http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
git show HEAD~4:index.html > local_file
其中4
表示从现在开始的第四个修订版本,~
是一个波浪符,如注释中所述。
git show HEAD:./my_other_file > local_file
。 - kenorbgit show refs/remotes/my_remote/master:./my_file
,其中refs路径是通过git show-ref
获取的正确远程路径。 - kenorbgit archive --remote=git@archive-accepting-git-server.com:foo/bar.git \
HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
我使用这个
$ cat ~/.wgetrc
check_certificate = off
$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
- Adobe错误:raw.github.com的证书验证错误:无法获取本地颁发者证书。
要不安全地连接到raw.github.com,请使用“--no-check-certificate”。
- Koscurl -H 'Cache-Control: no-cache, no-store' https://raw.githubusercontent.com/org/repo/master/file > outfile
,否则如果文件已经被下载,它就不会下载。 - Arundale Ramanathan