git cat-file

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

命名

git-cat-file - 提供资源库对象的内容或类型和大小信息

概要

git cat-file (-t [--allow-unknown-type]| -s [--allow-unknown-type]| -e | -p | <type> | --textconv | --filters ) [--path=<path>] <object>git cat-file (--batch | --batch-check) [ --textconv | --filters ] [--follow-symlinks]

描述

在第一种形式中,该命令提供存储库中对象的内容或类型。类型是必需的,除非-t-p用于查找的对象类型,或-s用于查找对象的大小,或--textconv--filters使用(其暗示型“斑点”)。

在第二种形式中,在 stdin 上提供了一个对象列表(由换行符分隔),每个对象的 SHA-1,类型和大小都打印在 stdout 上。使用可选<format>参数可以覆盖输出格式。如果指定了其中之一--textconv或者--filters被指定,则输入需要列出对象名称,后跟路径名称,并用一个空格分隔,以便可以确定适当的驱动程序。

选项

<object>

要显示的对象的名称。有关拼写对象名称的更完整列表,请参阅 gitrevisions [7] 中的“指定修订”部分。

-t

显示由<object>标识的对象类型而不是内容。

-s

显示由<object>标识的对象大小,而不是内容。

-e

控制所有输出; 如果<object>存在并且是有效的对象,则返回零状态。

-p

基于其类型 Pretty-print(漂亮地打印)<object>的内容。

<type>

通常情况下,它匹配<object>的实际类型,但是要求可以轻松地从给定<object>取消引用的类型也是允许的。一个例子是要求一个“树”,其中<object>是一个包含它的提交对象,或者要求一个<blob>作为指向它的标记对象。

--textconv

显示由 textconv过滤器转换的内容。在这种情况下,为了将过滤器应用于记录在<path>索引处的内容,<object> 必须采用 <tree-ish>:<path>或<path>的形式。

--filters

显示由当前工作树中为给定<路径>配置的过滤器转换的内容(即涂抹过滤器,行尾转换等)。在这种情况下,<object> 的格式必须是 <tree-ish>:<path>或<path>。

--path=<path>

与--textconv或--filters一起使用时,允许单独指定对象名称和路径,例如,当难以找出 blob 来自哪个版本时。

--batch --batch=<format>

打印 stdin 上提供的每个对象的对象信息和内容。不能与其他选项或参数结合使用,除非--textconv或者--filters,在这种情况下,输入行还需要指定由空白分隔的路径。有关BATCH OUTPUT详情,请参阅下面的部分。

--batch-check --batch-check=<format>

打印 stdin 上提供的每个对象的对象信息。不能与其他选项或参数结合使用,除非--textconv或者--filters,在这种情况下,输入行还需要指定由空白分隔的路径。有关BATCH OUTPUT详情,请参阅下面的部分。

--batch-all-objects

除了读取 stdin 上的对象列表,还可以对存储库中的所有对象以及任何其他对象存储(不仅仅是可到达的对象)执行请求的批处理操作。需要--batch或被--batch-check指定。请注意,这些对象是按照它们的散列顺序进行访问的。

--buffer

在每个对象输出后,通常会批处理输出刷新,以便进程可以交互式读取和写入cat-file。使用此选项,输出使用正常的stdio缓冲; 这在调用--batch-check大量对象时效率更高。

--allow-unknown-type

允许 -s 或 -t 查询未知类型的破坏/损坏( broken/corrupt)的对象。

--follow-symlinks

使用 --batch或--batch-check,当请求具有表单 tree-ish:path-in-tree 的扩展 SHA-1 表达式的对象时,请遵循存储库内的符号链接。提供关于链接本身的输出,而不是提供有关链接到对象的输出。如果符号链接指向 tree-ish 之外(例如指向/ foo的链接或指向 ../foo 的根级别链接),则会打印树外部分的链接部分。

当索引中的对象被指定(例如,:link而不是HEAD:link)而不是树中的一个时,此选项不能正常工作。

除非--batch--batch-check正在使用此选项不能(当前)使用。

例如,考虑一个包含以下内容的 git 存储库:

f: a file containing "hello\n"link: a symlink to f
dir/link: a symlink to ../f
plink: a symlink to ../f
alink: a symlink to /etc/passwd

对于常规文件fecho HEAD:f | git cat-file --batch将打印

ce013625030ba8dba906f756967f9e9ca394464a blob 6

并且echo HEAD:link | git cat-file --batch --follow-symlinks会打印同样的东西HEAD:dir/link,就像他们都指出HEAD:f的那样。

没有--follow-symlinks,这些将打印有关符号链接本身的数据。在这种情况下HEAD:link,你会看到

4d1ae35ba2c8ec712fa2a379db44ad639ca277bd blob 1

无论plinkalink点外树,因此他们将分别打印:

symlink 4../f
symlink 11/etc/passwd

输出

如果-t指定了其中一个<type>。

如果-s指定,则以字节为单位的<object>的大小。

如果-e指定,则不输出。

如果-p指定,则<object>的内容将被打印出来。

如果指定<type>,则会返回<object>的原始(但未压缩的)内容。

批量输出

如果--batch或者--batch-check给出,cat-file将从标准输入读取对象,每行一个,并打印关于它们的信息。默认情况下,整行被认为是一个对象,就像它被馈送到 git-rev-parse [1] 一样。

您可以使用自定义指定每个对象显示的信息<format>。它<format>被逐字复制到每个对象的标准输出中,%(atom)扩展形式的占位符后跟一个换行符。可用的原子是:

objectname

对象的40-十六进制对象名称。

objecttype

对象的类型(与cat-file -t报告相同)。

objectsize

对象的大小(以字节为单位cat-file -s)(与报告相同)。

objectsize:disk

对象在磁盘上占用的大小(以字节为单位)。请参阅CAVEATS以下部分有关磁盘大小的说明。

deltabase

如果对象存储为磁盘上的增量,则此扩展为delta基本对象的40-hex sha1。否则,展开为 null sha1(40个零)。见CAVEATS下文。

rest

如果在输出字符串中使用此原子,则会在第一个空白边界处分割输入行。该空白之前的所有字符都被认为是对象名称;在第一次运行空白(即,线的“休息”)之后的字符被输出以代替%(rest)原子。

如果未指定格式,则默认格式为%(objectname) %(objecttype) %(objectsize)

如果--batch指定,则对象信息后面是对象内容(由%(objectsize)字节组成),后面跟着换行符。

例如,--batch没有自定义格式会产生:

<sha1> SP <type> SP <size> LF<contents> LF

--batch-check='%(objectname) %(objecttype)'会产生:

<sha1> SP <type> LF

如果在标准输入中指定了一个名称,该名称无法解析为存储库中的对象,cat-file则将忽略任何自定义格式并进行打印:

<object> SP missing LF

如果使用--follow-symlinks,并且存储库中的符号链接指向存储库外部,cat-file则将忽略任何自定义格式并打印:

symlink SP <size> LF<symlink> LF

符号链接将是绝对的(以/开头),或者相对于树根。例如,如果 dir / link 指向 ../../foo,那么<symlink>将是 ../foo。<size>是符号链接的大小(以字节为单位)。

如果使用--follow-symlinks,则会显示以下错误消息:

<object> SP missing LF

在请求的初始符号链接不存在时打印。

dangling SP <size> LF<object> LF

是在初始符号链接存在时打印的,但它(传递)指向的东西没有。

loop SP <size> LF<object> LF

是为符号链接循环(或任何需要超过40个链接分辨率才能解析的符号链接)打印的。

notdir SP <size> LF<object> LF

在符号链接解析期间,当文件被用作目录名称时,会打印该文件。

注意事项

请注意,磁盘上的对象大小是准确报告的,但应该小心确定哪些引用或对象负责磁盘使用。压缩的非 delta 对象的大小可能远远大于反对它的 delta 对象的大小,但是选择哪个对象是基础,哪个是 delta 是任意的,并且在重新包装期间可能会发生变化。

还要注意对象数据库中可能存在多个对象副本;在这种情况下,未定义将报告哪个副本的大小或增量基数。