--distributed-is-the-new-centralized
English ▾ 主题 ▾ 最新版本 ▾ git-checkout-index 上次更新于 2.43.0

名称

git-checkout-index - 将文件从索引复制到工作树

概要

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

描述

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

选项

-u
--index

更新索引文件中已检出条目的状态信息。

-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 将为要检出的每个索引条目创建一个临时文件。索引将不会更新状态信息。如果调用者需要所有未合并条目的所有阶段,以便未合并的文件可以被外部合并工具处理,这些选项会很有用。

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

  1. tempname TAB path RS

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

  2. stage1temp SP stage2temp SP stage3tmp TAB path RS

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

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

如果要复制到临时文件的对象是一个符号链接,则链接的内容将被写入一个普通文件。最终用户或 Porcelain 需要使用此信息。

示例

仅更新和刷新已检出的文件
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
使用 git checkout-index 来 "导出整个树"

prefix 功能基本上使得使用 git checkout-index 作为 "导出为树" 功能变得非常简单。只需将所需的树读入索引,然后执行

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

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

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

导出带有前缀的文件
$ git checkout-index --prefix=.merged- Makefile

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

GIT

属于 git[1] 套件的一部分

scroll-to-top