directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

名称

git-checkout-index  - 将索引中的文件复制到工作树上

概要

git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]                   [--stage=<number>|all]                   [--temp]                   [-z] [--stdin]                   [--] [<file>…]

描述

将从索引中列出的所有文件复制到工作目录(不覆盖现有文件)。

选项

-u   --index

更新索引文件中检出条目的统计信息。

-q   --quiet

如果文件存在或不在索引中,请保持安静

-f   --force

强制覆盖现有文件

-a   --all

检出索引中的所有文件。不能与明确的文件名一起使用。

-n   --no-create

不要签出新文件,只刷新已经签出的文件。

--prefix=<string>

在创建文件时,请将<string>(通常是一个包含尾部/的目录)

--stage=<number>|all

而不是检查未合并的条目,从命名的阶段复制文件。<number>必须介于1和3之间。注意:--stage = all自动表明--temp。

--temp

将文件复制到工作目录而不是将内容写入临时文件。临时名称关联将写入 stdout。

--stdin

从标准输入中读取路径列表,而不是从命令行获取路径列表。路径由 LF 分隔(即每行一个路径)。

-z

只与--stdin有意义;路径用 NUL 字符而不是 LF 分隔。

--

不要将更多的参数解释为选项。

标志的顺序过去很重要,但现在不再了。

只是做git checkout-index什么都不做。你可能的意思git checkout-index -a。如果你想强制它,你想要的git checkout-index -f -a

直观性不是这里的目标。重复性是。“没有参数意味着没有工作”的原因是你应该能够执行的脚本:

$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --

这将强制所有现有的*.h文件被替换为它们的缓存副本。如果空的命令行暗示“全部”,那么这将强制刷新索引中的所有内容,这不是重点。但是由于git checkout-index接受--stdin,使用它会更快:

$ find . -name '*.h' -print0 | git checkout-index -f -z --stdin

当你知道剩下的将是文件名时,这--就是一个好主意;例如-a,它可以防止文件名的问题。在脚本中使用--可能是一个很好的策略。

使用--temp 或--stage = all

--temp被使用时(或被--stage=all表明时)git checkout-index将为每个正在签出的索引条目创建一个临时文件。该索引不会用 stat 信息更新。如果调用者需要所有未合并条目的所有阶段,这些选项可能非常有用,以便可以通过外部合并工具处理未合并的文件。

列表将写入 stdout,提供临时文件名与跟踪路径名的关联。列表格式有两个变体:

1. tempname TAB路径RS

第一种格式--stage是省略或不使用时使用的格式--stage=all。字段 tempname 是包含文件内容的临时文件名,path 是索引中的跟踪路径名。只输出请求的条目。

2. stage1temp SP stage2temp SP stage3tmp TAB路径RS

第二种格式是什么时候使用--stage=all。如果在索引.中存在阶段条目或者没有阶段条目,则三个阶段临时字段(stage1temp,stage2temp,stage3temp)会列出临时文件的名称。只有阶段0条目的路径将始终从输出中省略。

在这两种格式中,默认情况下 RS(记录分隔符)都是换行符,但如果在命令行上传递-z,则将为空字节。临时文件名总是安全的字符串; 他们将永远不会包含目录分隔符或空白字符。路径字段总是相对于当前目录,并且临时文件名始终相对于顶级目录。

如果被复制到临时文件的对象是符号链接,则该链接的内容将被写入普通文件。终端用户或瓷器会使用这些信息。

示例

仅更新和刷新已检出的文件

$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh

使用 git checkout-index 来“导出整个树”

前缀能力基本上使它git checkout-index作为一个“导出为树”函数使用很简单。只需在索引中读取所需的树,然后执行:

$ git checkout-index --prefix=git-export-dir/ -a

git checkout-index 会将索引“导出”到指定的目录中。

最后的“/”很重要。导出的名称实际上只是以指定的字符串作为前缀。将此与以下示例进行对比。

用前缀导出文件

$ git checkout-index --prefix=.merged- Makefile

这将检出当前缓存Makefile.merged-Makefile文件中的副本。

Previous article: Next article: