设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
打补丁
调试
外部系统
服务器管理
指南
管理
底层命令
- 2.46.2 → 2.49.0 无更改
-
2.46.1
2024-09-13
- 2.42.2 → 2.46.0 无更改
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.40.1 → 2.41.3 无更改
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 无更改
-
2.38.0
2022-10-02
- 2.36.1 → 2.37.7 无更改
-
2.36.0
2022-04-18
- 2.34.1 → 2.35.8 无更改
-
2.34.0
2021-11-15
- 2.32.1 → 2.33.8 无更改
-
2.32.0
2021-06-06
- 2.28.1 → 2.31.8 无更改
-
2.28.0
2020-07-27
- 2.21.1 → 2.27.1 无更改
-
2.21.0
2019-02-24
- 2.19.1 → 2.20.5 无更改
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 无更改
-
2.16.6
2019-12-06
- 2.15.4 无更改
-
2.14.6
2019-12-06
- 2.12.5 → 2.13.7 无更改
-
2.11.4
2017-09-22
- 2.10.5 无更改
-
2.9.5
2017-07-30
- 2.7.6 → 2.8.6 无更改
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
- 2.1.4 → 2.4.12 无更改
-
2.0.5
2014-12-17
概要
git cat-file <type> <object> git cat-file (-e | -p) <object> git cat-file (-t | -s) [--allow-unknown-type] <object> git cat-file (--textconv | --filters) [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>] git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects] [--buffer] [--follow-symlinks] [--unordered] [--textconv | --filters] [-Z]
描述
输出一个或多个对象的内容或其他属性,如大小、类型或增量信息。
此命令可以两种模式运行,具体取决于是否指定了来自 --batch
系列的选项。
在非批处理模式下,该命令提供有关命令行上命名的对象的信息。
在批处理模式下,参数从标准输入读取。
选项
- <对象>
-
要显示的对象的名称。 有关拼写对象名称的更多完整列表,请参阅 gitrevisions[7] 中的“指定修订”部分。
- -t
-
不显示内容,而是显示由
<对象>
标识的对象类型。 - -s
-
不显示内容,而是显示由
<对象>
标识的对象大小。 如果与--use-mailmap
选项一起使用,将显示在使用 mailmap 机制替换标识后更新的对象的大小。 - -e
-
如果
<对象>
存在且是有效对象,则以零状态退出。 如果<对象>
的格式无效,则以非零状态退出并在 stderr 上发出错误。 - -p
-
根据
<对象>
的类型,以美观的方式打印其内容。 - <类型>
-
通常,这与
<对象>
的真实类型匹配,但允许请求可以从给定<对象>
轻松解引用的类型。 一个例子是请求一个 "tree",其中<对象>
是包含它的提交对象,或者请求一个 "blob",其中<对象>
是指向它的标签对象。 - --[no-]mailmap
- --[no-]use-mailmap
-
使用 mailmap 文件将作者、提交者和标记者的姓名和电子邮件地址映射到规范的真实姓名和电子邮件地址。 请参阅 git-shortlog[1]。
- --textconv
-
显示由 textconv 过滤器转换的内容。 在这种情况下,
<对象>
必须是<tree-ish>:<path>
形式,或者:<path>
形式,以便将过滤器应用于索引中记录在<path>
的内容。 - --filters
-
显示由当前工作树中为给定
<path>
配置的过滤器(即,涂抹过滤器、行尾转换等)转换的内容。 在这种情况下,<对象>
必须是<tree-ish>:<path>
形式,或者:<path>
。 - --path=<路径>
-
与
--textconv
或--filters
一起使用,以允许单独指定对象名称和路径,例如,当难以确定 blob 来自哪个修订时。 - --batch
- --batch=<格式>
-
打印在 stdin 上提供的每个对象的信息和内容。 除了
--textconv
、--filters
或--use-mailmap
之外,不能与任何其他选项或参数组合使用。-
与
--textconv
或--filters
一起使用时,输入行必须指定路径,以空格分隔。 有关详细信息,请参阅下面的BATCH OUTPUT
部分。 -
与
--use-mailmap
一起使用时,对于 commit 和 tag 对象,输出的内容部分显示使用 mailmap 机制替换的标识,而输出的信息部分显示对象的大小,就好像它实际记录了替换标识一样。
-
- --batch-check
- --batch-check=<格式>
-
打印在 stdin 上提供的每个对象的信息。 除了
--textconv
、--filters
或--use-mailmap
之外,不能与任何其他选项或参数组合使用。-
与
--textconv
或--filters
一起使用时,输入行必须指定路径,以空格分隔。 有关详细信息,请参阅下面的BATCH OUTPUT
部分。 -
与
--use-mailmap
一起使用时,对于 commit 和 tag 对象,打印的对象信息显示对象的大小,就好像其中记录的标识被 mailmap 机制替换一样。
-
- --batch-command
- --batch-command=<格式>
-
进入从 stdin 读取命令和参数的命令模式。 只能与
--buffer
、--textconv
、--use-mailmap
或--filters
组合使用。-
与
--textconv
或--filters
一起使用时,输入行必须指定路径,以空格分隔。 有关详细信息,请参阅下面的BATCH OUTPUT
部分。 -
与
--use-mailmap
一起使用时,对于 commit 和 tag 对象,contents
命令显示使用 mailmap 机制替换的标识,而info
命令显示对象的大小,就好像它实际记录了替换标识一样。
--batch-command
识别以下命令 -
- --batch-all-objects
-
不要在 stdin 上读取对象列表,而是在存储库和任何备用对象存储中的所有对象(不仅仅是可访问对象)上执行请求的批处理操作。 需要指定
--batch
或--batch-check
。 默认情况下,对象按其哈希值排序后按顺序访问; 另请参阅下面的--unordered
。 对象按原样呈现,不尊重 git-replace[1] 的“替换”机制。 - --buffer
-
通常,批处理输出在每个对象输出后都会刷新,以便进程可以交互式地从
cat-file
读取和写入。 使用此选项,输出使用正常的 stdio 缓冲; 在大量对象上调用--batch-check
或--batch-command
时,这效率更高。 - --unordered
-
使用
--batch-all-objects
时,以一种可能比哈希顺序更有效地访问对象内容的顺序访问对象。 顺序的确切细节未指定,但如果您不需要特定的顺序,这通常会产生更快的输出,尤其是在使用--batch
时。 请注意,即使cat-file
将每个对象多次存储在存储库中,它仍然只会显示一次。 - --allow-unknown-type
-
允许
-s
或-t
查询未知类型的损坏/已损坏对象。 - --follow-symlinks
-
使用
--batch
或--batch-check
时,当请求具有扩展 SHA-1 表达式(形式为 tree-ish:树中路径)的对象时,跟随仓库内的符号链接。不提供关于链接本身的输出,而是提供关于链接到的对象的输出。如果符号链接指向 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
对于一个普通文件
f
,echo 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
plink
和alink
都指向树之外,所以它们将分别打印:symlink 4 ../f
symlink 11 /etc/passwd
- -Z
-
仅在使用
--batch
、--batch-check
或--batch-command
时有意义;输入和输出使用 NUL 分隔符而不是换行符分隔。 - -z
-
仅在使用
--batch
、--batch-check
或--batch-command
时有意义;输入使用 NUL 分隔符而不是换行符分隔。此选项已被弃用,建议使用-Z
,因为否则输出可能会有歧义。
输出
如果指定了 -t
,则为 <type>
之一。
如果指定了 -s
,则为 <object>
的大小,以字节为单位。
如果指定了 -e
,则没有输出,除非 <object>
格式错误。
如果指定了 -p
,则对 <object>
的内容进行漂亮打印。
如果指定了 <type>
,则将返回 <object>
的原始(但未压缩)内容。
批量输出
如果给出了 --batch
或 --batch-check
,cat-file
将从 stdin 读取对象,每行一个,并按照读取它们的顺序打印关于它们的信息。默认情况下,整行都被视为一个对象,就像将其提供给 git-rev-parse[1] 一样。
当给出 --batch-command
时,cat-file
将从 stdin 读取命令,每行一个,并根据给出的命令打印信息。使用 --batch-command
,info
命令后跟一个对象将以与 --batch-check
相同的方式打印关于该对象的信息,而 contents
命令后跟一个对象将以与 --batch
相同的方式打印内容。
您可以使用自定义的 <format>
来指定为每个对象显示的信息。<format>
被逐字复制到 stdout,每个对象一个,其中 %(atom)
形式的占位符被展开,后跟一个换行符。可用的原子有:
-
objectname
-
对象名称的完整十六进制表示。
-
objecttype
-
对象的类型(与
cat-file -t
报告的相同)。 -
objectsize
-
对象的大小,以字节为单位(与
cat-file -s
报告的相同)。 -
objectsize:disk
-
对象在磁盘上占用的空间大小,以字节为单位。请参阅下面
CAVEATS
部分中关于磁盘大小的说明。 -
deltabase
-
如果对象存储为磁盘上的增量,则将其展开为增量基础对象名称的完整十六进制表示。否则,展开为 null OID(全部为零)。请参阅下面的
CAVEATS
。 -
rest
-
如果在输出字符串中使用此原子,则输入行将在第一个空白边界处拆分。该空白之前的所有字符都被认为是对象名称;第一个空白之后的所有字符(即,行的“其余”部分)将代替
%(rest)
原子输出。
如果未指定格式,则默认格式为 %(objectname) %(objecttype) %(objectsize)
。
如果指定了 --batch
,或者如果 --batch-command
与 contents
命令一起使用,则对象信息后跟对象内容(由 %(objectsize)
字节组成),后跟一个换行符。
例如,没有自定义格式的 --batch
将产生:
<oid> SP <type> SP <size> LF <contents> LF
而 --batch-check='%(objectname) %(objecttype)'
将产生:
<oid> SP <type> LF
如果在 stdin 上指定的名称无法解析为仓库中的对象,则 cat-file
将忽略任何自定义格式并打印:
<object> SP missing LF
如果指定的名称可能引用多个对象(一个模棱两可的短 sha),则 cat-file
将忽略任何自定义格式并打印:
<object> SP ambiguous 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
当在符号链接解析期间,将文件用作目录名时打印。
或者,当传递了 -Z
时,以上任何示例中的换行符都将替换为 NUL 终止符。这确保了如果输出本身包含换行符,则输出将可解析,因此建议用于脚本编写目的。
注意事项
请注意,磁盘上对象的大小报告准确,但在得出关于哪些引用或对象负责磁盘使用情况的结论时应谨慎。打包的非增量对象的大小可能比增量依赖它的对象大得多,但是选择哪个对象是基础以及哪个对象是增量是任意的,并且在重新打包期间可能会更改。
另请注意,对象的多个副本可能存在于对象数据库中;在这种情况下,将报告哪个副本的大小或增量基础是未定义的。
GIT
属于 git[1] 套件的一部分