我如何从一个git回购签出一个文件?
当前回答
通常不可能像第一个回答中建议的那样,只从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 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 archive --remote=git://git.example.com/project.git refs/heads/mybranch path/to/myfile |tar xf -
剩下的可以从@VonC的回答中得到:
如果你需要一个来自主分支的特定文件,它是:
git archive --remote=git://git.example.com/project.git HEAD path/to/myfile |tar xf -
如果你需要一个标签的特定文件,它是:
git archive --remote=git://git.example.com/project.git mytag path/to/myfile |tar xf -
如果你已经有了一个git回购的副本,你可以使用git日志签出一个文件的版本来找出哈希id(例如3cdc61015724f9965575ba954c8cd4232c8b42e4),然后你只需输入:
git checkout hash-id path-to-file
下面是一个实际的例子:
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /var/www/css/page.css
如果你有一个本地修改的文件(搅乱了git的文件),只需要这样做:
git checkout origin/master filename
Git签出-切换分支或恢复工作树文件,(这里我们什么都不切换,只是覆盖文件 Origin /master -您当前的分支,或者您可以使用特定的修订号,例如:cd0fa799c582e94e59e5b21e872f5ffe2ad0154b, 包含项目主目录路径的文件名(.git目录所在位置) 所以如果你有结构:
“.git
公共/ index . html
public / css / style . css
供应商
composer.lock”
想要重新加载index.html -只需使用public/index.html
我添加这个答案作为做正式签出或一些类似的本地操作的替代方案。假设您可以访问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添加?
- 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拉另一个分支