我该如何从git仓库中只检出一个文件?
我该如何从git仓库中只检出一个文件?
我将添加这个答案作为一种替代正式检出或类似的本地操作的方法。假设您可以访问Git提供程序的Web界面,您可能能够直接查看给定所需提交的任何文件。例如,在GitHub上,您可以使用以下内容:
https://github.com/hubotio/hubot/blob/ed25584f/src/adapter.coffee
ed25584f
是感兴趣的提交的SHA-1哈希的前8个字符,后面跟着源文件的路径。https://bitbucket.org/cofarrell/stash-browse-code-plugin/src/06befe08
我没有看到任何适用于我的情况的解决方案,所以我将包括它,以防有人和我一样。
我的情况是,我有一个远程仓库,大约有10,000个文件,我需要为我的Linux系统构建一个RPM文件。 RPM的构建包括对所有内容进行git克隆。 我只需要一个文件来启动RPM构建。 我可以克隆整个源代码树,这样做就可以满足我的需求,但当我只需要一个文件时,下载所有这些文件需要额外的两分钟时间。 我尝试使用讨论过的git存档选项,但我得到了“致命错误:协议不支持的操作”。 看来我必须在服务器上启用某种存档选项,而我的服务器由官僚暴徒维护,他们似乎喜欢让事情变得困难。
最后我做的是进入bitbucket的Web界面,查看我需要的一个文件。 我右键单击链接以下载文件的原始副本,并从结果弹出窗口中选择“复制快捷方式”。 我不能只下载原始文件,因为我需要自动化处理,而我的Linux服务器上没有浏览器界面。
为了讨论,这导致了以下URL:
https://ourArchive.ourCompany.com/projects/ThisProject/repos/data/raw/foo/bar.spec?at=refs%2Fheads%2FTheBranchOfInterest
我无法直接从Bitbucket存储库下载此文件,因为我需要先登录。经过一番搜索,我发现以下方法可行: 在Linux上:
echo "myUser:myPass123"| base64
bXlVc2VyOm15UGFzczEyMwo=
curl -H 'Authorization: Basic bXlVc2VyOm15UGFzczEyMwo=' 'https://ourArchive.ourCompany.com/projects/ThisProject/repos/data/raw/foo/bar.spec?at=refs%2Fheads%2FTheBranchOfInterest' > bar.spec
这种组合让我能够下载我需要构建其他所有内容的一个文件。
看起来你正在试图从集中式版本控制的思路中延续一些想法,但 git 本性上是分布式的。如果你想要使用一个 git 仓库,你需要克隆它。然后你就会拥有所有的工作树内容和全部的历史记录(至少是在当前分支顶端之前的所有内容),而不仅仅是单个文件或来自单个提交的快照。
git clone /path/to/repo
git clone git://url/of/repo
git clone http://url/of/repo
是的,您可以使用此命令下载一个特定的文件
wget -o <DesiredFileName> <Git FilePath>\?token\=<personalGitToken>
例子
wget -o javascript-test-automation.md https://github.com/akashgupta03/awesome-test-automation/blob/master/javascript-test-automation.md\?token\=<githubPersonalTone>
git checkout <other-branch> -- <single-file>
在我的 git.2.37.1 版本上可以使用。
然而,该文件已经被 (git-神奇地) 暂存以进行提交,我不能正常查看 git diff
。
因此我执行了 git restore --staged db/structure.sql
来取消暂存。
这样一来,我就得到了我想要的准确版本的文件,并且可以查看该文件的其他版本之间的差异。
如果您已经编辑了本地文件的版本,并希望恢复到中央服务器上维护的原始版本,可以使用Git Extensions轻松实现。
简单易行!
如果你只需要下载文件,无需使用Git进行检出。
GitHub Mate更容易实现这一点,它是一个Chrome扩展程序,使您可以单击文件图标进行下载。同时开源