设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.43.1 → 2.53.0 无变更
-
2.43.0
2023-11-20
- 2.36.1 → 2.42.4 无变更
-
2.36.0
2022-04-18
- 2.1.4 → 2.35.8 无变更
-
2.0.5
2014-12-17
概要
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
-
不检出未合并的条目,而是从指定的阶段(stage)复制出文件。<number> 必须在 1 到 3 之间。注意:--stage=all 会自动隐含 --temp。
- --temp
-
不将文件复制到工作目录,而是将内容写入临时文件。临时文件名与路径的对应关系将写入标准输出(stdout)。
- --ignore-skip-worktree-bits
-
检出所有文件,包括那些设置了 skip-worktree 位的文件。
- --stdin
-
不从命令行获取路径列表,而是从标准输入读取路径列表。默认情况下,路径由换行符(LF)分隔(即每行一个路径)。
- -z
-
仅在使用
--stdin时有意义;路径使用 NUL 字符而非 LF 分隔。 - --
-
不再将任何后续参数解释为选项。
标志(flag)的顺序曾经很重要,但现在不再重要了。
只执行 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 信息。如果调用者需要未合并条目的所有阶段,以便通过外部合并工具处理未合并的文件,这些选项非常有用。
一个列表将写入标准输出,提供临时文件名与跟踪路径名的关联。列表格式有两种变体:
-
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,则将是空字节(null byte)。临时文件名始终是安全字符串;它们绝不会包含目录分隔符或空白字符。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/ -a
gitcheckout-index将把暂存区“导出”到指定的目录中。末尾的 "/" 非常重要。导出的名称字面上只是在前面加上了指定的字符串。将其与以下示例进行对比。
- 导出带有前缀的文件
-
$ git checkout-index --prefix=.merged- Makefile
这将把当前缓存的
Makefile副本检出到文件.merged-Makefile中。