如何在Git仓库中只稀疏地检出单个文件?

598

我该如何从git仓库中只检出一个文件?


10
"check out"是什么意思?是从远程代码库获取单个文件的副本吗? - Cascabel
2
如果相关的仓库正在使用gitweb,您可以直接从那里下载文件。正如我下面所解释的,您所要求的并不是标准的git操作。 - Cascabel
你可以使用Chrome扩展程序GitHub Mate,它使你能够点击文件图标来下载它。 - Cam Song
可能是从存储库检索单个文件的重复问题。 - Jacek Krysztofik
显示剩余4条评论
27个回答

1

我将添加这个答案作为一种替代正式检出或类似的本地操作的方法。假设您可以访问Git提供程序的Web界面,您可能能够直接查看给定所需提交的任何文件。例如,在GitHub上,您可以使用以下内容:

https://github.com/hubotio/hubot/blob/ed25584f/src/adapter.coffee

这里的ed25584f是感兴趣的提交的SHA-1哈希的前8个字符,后面跟着源文件的路径。
同样地,在Bitbucket上我们可以尝试:
https://bitbucket.org/cofarrell/stash-browse-code-plugin/src/06befe08

在这种情况下,我们将提交哈希放置在源URL的末尾。

0

我没有看到任何适用于我的情况的解决方案,所以我将包括它,以防有人和我一样。

我的情况是,我有一个远程仓库,大约有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

这种组合让我能够下载我需要构建其他所有内容的一个文件。


0

看起来你正在试图从集中式版本控制的思路中延续一些想法,但 git 本性上是分布式的。如果你想要使用一个 git 仓库,你需要克隆它。然后你就会拥有所有的工作树内容和全部的历史记录(至少是在当前分支顶端之前的所有内容),而不仅仅是单个文件或来自单个提交的快照。

 git clone /path/to/repo
 git clone git://url/of/repo
 git clone http://url/of/repo

0

是的,您可以使用此命令下载一个特定的文件

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>

0

git checkout <other-branch> -- <single-file> 在我的 git.2.37.1 版本上可以使用。
然而,该文件已经被 (git-神奇地) 暂存以进行提交,我不能正常查看 git diff
因此我执行了 git restore --staged db/structure.sql 来取消暂存。

这样一来,我就得到了我想要的准确版本的文件,并且可以查看该文件的其他版本之间的差异。


-4

如果您已经编辑了本地文件的版本,并希望恢复到中央服务器上维护的原始版本,可以使用Git Extensions轻松实现。

  • 最初,该文件将被标记为提交,因为它已被修改
  • 在文件树菜单中选择(双击)文件
  • 列出单个文件的修订树。
  • 选择树的顶部/HEAD,右键单击保存为
  • 将文件保存以覆盖修改后的本地文件版本
  • 文件现在具有正确的版本,并且不再标记为提交!

简单易行!


-4

如果你只需要下载文件,无需使用Git进行检出。

GitHub Mate更容易实现这一点,它是一个Chrome扩展程序,使您可以单击文件图标进行下载。同时开源


10
“git”不等于“github”。 - Jan Groth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接