我如何从一个git回购签出一个文件?
当前回答
首先使用-n选项和——depth 1选项克隆repo,前者抑制所有文件的默认签出,后者意味着它只获取每个文件的最新修订
git clone -n git://path/to/the_repo.git --depth 1
然后签出你想要的文件,就像这样:
cd the_repo
git checkout HEAD name_of_file
其他回答
已有内容的两种变体:
git archive --format=tar --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -O -xf -
and:
git archive --format=zip --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | funzip
它们将文件写入标准输出。
通常不可能像第一个回答中建议的那样,只从git下载一个文件,而不下载整个存储库。 这是因为Git不像您想象的那样存储文件(像CVS/SVN那样),而是根据项目的整个历史生成文件。
但在特定情况下有一些变通办法。下面的例子为用户、项目、分支和文件名设置了占位符。
GitHub
wget https://raw.githubusercontent.com/user/project/branch/filename
GitLab
wget https://gitlab.com/user/project/raw/branch/filename
GitWeb
如果你在服务器上使用Git - GitWeb,那么你可以在示例中尝试(将其更改为正确的路径):
wget "http://example.com/gitweb/?p=example;a=blob_plain;f=README.txt;hb=HEAD"
GitWeb 和 drupalcode.org
例子:
wget "http://drupalcode.org/project/ads.git/blob_plain/refs/heads/master:/README.md"
googlesource.com
有一个未记录的特性允许你下载base64编码的原始文件版本:
curl "https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json?format=TEXT" | base64 --decode
在其他情况下,检查Git存储库是否使用任何web界面。
如果它不使用任何web界面,你可以考虑将你的代码推送到外部服务,如GitHub, Bitbucket等,并将其用作镜像。
如果你没有安装wget,试试curl -O (url)。
最小的指南
Git checkout——<filename>
裁判:https://git-scm.com/docs/git-checkout
Dup:在Git中撤销一个文件的工作副本修改?
我添加这个答案作为做正式签出或一些类似的本地操作的替代方案。假设您可以访问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的末尾。
这听起来像是你试图从集中式版本控制中继承一个想法,而git本质上不是这样的——它是分布式的。如果你想使用git存储库,你可以克隆它。然后,您就拥有了工作树的所有内容和所有历史记录(好吧,至少是指向当前分支顶端的所有内容),而不仅仅是单个文件或单个提交的快照。
git clone /path/to/repo
git clone git://url/of/repo
git clone http://url/of/repo
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 如何在Python中获得所有直接子目录
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 如何在Ruby中创建文件
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支