我如何从一个git回购签出一个文件?
当前回答
如果你需要一个来自远程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 archive --format=tar --remote=origin HEAD | tar xf -
git archive --format=tar --remote=origin HEAD <file> | tar xf -
非常简单:
git checkout from-branch-name -- path/to/the/file/you/want
这将不会签出from-branch-name分支。您将停留在您所在的分支上,并且只有该文件将从指定的分支签出。
下面是git-checkout手册的相关部分
git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...
When <paths> or --patch are given, git checkout does not switch
branches. It updates the named paths in the working tree from the
index file or from a named <tree-ish> (most often a commit). In
this case, the -b and --track options are meaningless and giving
either of them results in an error. The <tree-ish> argument can be
used to specify a specific tree-ish (i.e. commit, tag or tree) to
update the index for the given paths before updating the working
tree.
向Ariejan de Vroom致敬,他在这篇博客文章中教会了我这些。
现在我们可以了!因为这是谷歌上的第一个结果,我想我应该把它更新到最新的位置。随着git 1.7.9.5的出现,我们有了git归档命令,它将允许您从远程主机检索单个文件。
git archive --remote=git://git.foo.com/project.git HEAD:path/in/repo filename | tar -x
在这里可以看到完整的答案https://stackoverflow.com/a/5324532/290784
如果您编辑了文件的本地版本,并希望恢复到中央服务器上维护的原始版本,可以使用Git扩展轻松实现。
最初文件将被标记为提交,因为它已被修改 在文件树菜单中选择(双击)该文件 列出了单个文件的修订树。 选择树的顶部/HEAD,然后右键单击save as 保存该文件以覆盖修改后的文件本地版本 文件现在有正确的版本,将不再被标记为提交!
简单!
最小的指南
Git checkout——<filename>
裁判:https://git-scm.com/docs/git-checkout
Dup:在Git中撤销一个文件的工作副本修改?
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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拉另一个分支