git checkout-index

优质
小牛编辑
126浏览
2023-12-01

名称

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文件中的副本。