我该如何从git仓库中只检出一个文件?
我该如何从git仓库中只检出一个文件?
非常简单:
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 archive --format=tar --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -O -xf -
并且:
git archive --format=zip --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | funzip
这些语句将文件写入标准输出。
您可以通过以下方式实现:
git archive --format=tar --remote=origin HEAD | tar xf -
git archive --format=tar --remote=origin HEAD <file> | tar xf -
假设文件名为123.txt,以下方式适用于我:
git checkout --theirs 123.txt
git checkout --theirs "A/123.txt"
git status
index
中(index
就像一个待核对的列表):git add .
或者
git add blah.c
接下来执行 git status
将会显示哪些文件被修改了,哪些处于 index
状态可以被提交或者检查。
将文件提交到您的代码库,请执行:
git commit -a -m "commit message here"
请访问git
网站获取相关手册和指南。
git format-patch
创建一个用于提交的补丁(git format-patch -1
将为你最近的提交创建一个补丁)。 - Cascabelgit clone --no-checkout --depth 1 git.example.com/project.git && cd project && git show HEAD:path/to/file_you_need > ../file_you_need && cd .. && rm -rf project
git clone --no-checkout --depth 1 git.example.com/project.git && cd project && git show HEAD:path/to/file_you_need > ../file_you_need && cd .. && rm -rf project
,尝试在放置代码时使用 Ctrl+K。 - Vicky Dev
git archive --remote=git://git.example.com/project.git refs/heads/mybranch path/to/myfile |tar xf -
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 -
--filter=blob:none
的方法,是使用 --filter=tree:0
(你可以在 这里 阅读有关差异的说明)。blob
更快,因为它不会下载树形结构,但是它也有一个缺点。由于你延迟了树的检索,当你进入仓库目录时会受到惩罚(取决于你的仓库大小和结构,与简单的浅克隆相比可能会大几倍)。git clone -n --filter=tree:0 <repo_url> tgt_dir
git -C tgt_dir checkout <branch> -- <filename>
cat tgt_dir/<filename> # or move it to another place and delete tgt_dir ;)
tree:0
和blob:none
在检出时似乎会下载不必要的树对象。测试仓库:https://github.com/cirosantilli/test-git-partial-clone-big-small,其中包含`big_tree`下的一些巨大树。如果您找到解决方案,请告诉我。 - Ciro Santilli OurBigBook.comgit pull
的文件),只需执行以下操作:git checkout origin/master filename
git checkout
- 切换分支或恢复工作树文件,(这里我们不切换任何东西,只是覆盖文件)origin/master
- 您当前的分支,或者您可以使用特定的 revision-number
,例如:cd0fa799c582e94e59e5b21e872f5ffe2ad0154b
,.git
存在)`.git
public/index.html
public/css/style.css
供应商
composer.lock`
如果想要重新加载 index.html - 只需使用 public/index.html
codecommit
中,您可以这样做:aws codecommit \
get-file --repository-name myrepo \
--commit-specifier master \
--file-path path/myfile \
--output text \
--query fileContent |
base64 --decode > myfile