设置和配置
获取和创建项目
基本快照
分支和合并
分享和更新项目
检查和比较
补丁
调试
邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.43.1 → 2.49.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
-
更新索引文件中已检出条目的状态信息。
- -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,提供临时文件名与跟踪路径名的关联。列表格式有两种变体
-
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 字节。临时文件名始终是安全的字符串;它们永远不会包含目录分隔符或空格字符。 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] 套件的一部分