git-checkout-index
命令名称 - 将文件从索引复制到工作树
概要
[verse]
'git checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
[--stage=<number>|all]
[--temp]
[--ignore-skip-worktree-bits]
[-z] [--stdin]
[--] [<file>...]描述
将所有列出的文件从索引复制到工作目录(不覆盖现有文件)。
选项
-u/--index- 更新索引文件中已检出条目的 stat 信息。-q/--quiet- 如果文件存在或不在索引中则保持安静。-f/--force- 强制覆盖现有文件。-a/--all- 检出索引中除设置了 skip-worktree 位的文件以外的所有文件(参见--ignore-skip-worktree-bits)。不能与显式文件名一起使用。-n/--no-create- 不检出新文件,仅刷新已检出的文件。--prefix=<string>- 创建文件时,在前面加上<string>(通常是包含尾部 / 的目录)。--stage=<number>|all- 不是检出未合并的条目,而是从指定的阶段复制文件。<number>必须在 1 和 3 之间。注意:--stage=all自动隐含--temp。--temp- 不是将文件复制到工作目录,而是将内容写入临时文件。临时名称关联将写入 stdout。--ignore-skip-worktree-bits- 检出所有文件,包括设置了 skip-worktree 位的文件。--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,提供临时文件名与跟踪路径名的关联。列表格式有两种变体:
. tempname TAB path RS第一种格式在省略 --stage 或不是 --stage=all 时使用。字段 tempname 是保存文件内容的临时文件名,path 是索引中的跟踪路径名。仅输出请求的条目。
. stage1temp SP stage2temp SP stage3tmp TAB path RS第二种格式在使用 --stage=all 时使用。三个阶段临时字段(stage1temp、stage2temp、stage3temp)列出了索引中存在阶段条目时的临时文件名,如果不存在阶段条目则为 .。只有阶段 0 条目的路径将始终从输出中省略。
在两种格式中,RS(记录分隔符)默认为换行符,但如果在命令行上传递了 -z,则为空字节。临时文件名始终是安全字符串;它们永远不会包含目录分隔符或空白字符。path 字段始终相对于当前目录,临时文件名始终相对于顶级目录。
如果复制到临时文件的对象是符号链接,链接的内容将写入普通文件。由最终用户或 Porcelain 来利用此信息。
示例
仅更新和刷新已检出的文件:
$ 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/ -agit checkout-index将索引"导出"到指定的目录。最后的 "/" 很重要。导出的名称实际上只是在前面加上指定的字符串。请与以下示例对比。
导出带前缀的文件:
$ git checkout-index --prefix=.merged- Makefile这将把当前缓存的
Makefile副本检出到文件.merged-Makefile中。
Git
git(1) 套件的一部分
