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
(暗示类型为“blob”),否则类型是必需的。
在第二种形式中,stdin上提供了一个对象列表(由换行符分隔),每个对象的SHA-1,类型和大小都打印在stdout上。可以使用可选的<format>
参数覆盖输出格式。如果指定了--textconv
或--filters
,则输入应该列出对象名称,后跟路径名称,由单个空格分隔,以便可以确定相应的驱动程序。
<object>
要显示的对象的名称。有关拼写对象名称的更完整列表,请参阅 gitrevisions [7] 中的“指定修订”部分。
-t
而不是内容,显示由< object>标识的对象类型。
-s
而不是内容,显示由< object>标识的对象大小。
-e
如果< object>,则退出为零状态存在并且是一个有效的对象。如果< object>是非格式的无效格式退出非零,并在stderr上发出错误。
-p
漂亮打印< object>的内容根据其类型。
<type>
通常,这与< object>的实际类型匹配。但是要求一种可以从给定的< object>中解除引用的类型。也是允许的。一个例子是要求一个带有< object>的“树”。是包含它的提交对象,或者要求< object>的“blob”是一个指向它的标记对象。
--textconv
显示由textconv过滤器转换的内容。在这种情况下,< object>必须采用< tree-ish>形式:< path>或:< path>为了将过滤器应用于< path>中索引中记录的内容。
--filters
显示由当前工作树中为给定< path>配置的过滤器转换的内容。 (即涂抹过滤器,行尾转换等)。在这种情况下,< 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
时效率更高。
--unordered
使用--batch-all-objects
时,按顺序访问对象,这可能比散列顺序更有效地访问对象内容。订单的确切细节未指定,但如果您不需要特定订单,这通常会导致更快的输出,尤其是--batch
。请注意,cat-file
仍将仅显示每个对象一次,即使它在存储库中多次存储也是如此。
--allow-unknown-type
允许-s或-t查询未知类型的已损坏/损坏对象。
--follow-symlinks
使用--batch或--batch-check时,在请求具有树形式为tree-ish:path-in-tree的扩展SHA-1表达式的对象时,请遵循存储库中的符号链接。不提供有关链接本身的输出,而是提供有关链接对象的输出。如果符号链接指向树之外(例如指向/ 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
如果指定了-t
,则其中一个< type>。
如果指定了-s
,则< object>的大小。以字节为单位
如果指定了-e
,则不输出,除非< object>是畸形的
如果指定了-p
,则< object>的内容很漂亮。
如果< type>指定了< object>的原始(虽然未压缩)内容。将被退回。
如果给出--batch
或--batch-check
,cat-file
将从标准输入读取对象,每行一个,并打印有关它们的信息。默认情况下,整行被视为一个对象,就像它被送到 git-rev-parse [1] 一样。
您可以使用自定义<format>
指定为每个对象显示的信息。 <format>
按字面复制到每个对象的stdout,展开%(atom)
形式的占位符,后跟换行符。可用的原子是:
objectname
对象的40十六进制对象名称。
objecttype
对象的类型(与cat-file -t
报告相同)。
objectsize
对象的大小(以字节为单位)(与cat-file -s
报告相同)。
objectsize:disk
对象占用磁盘的大小(以字节为单位)。请参阅下面CAVEATS
部分中有关磁盘大小的说明。
deltabase
如果对象存储为磁盘上的增量,则会扩展为增量基础对象的40-hex sha1。否则,展开为空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
如果在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。 <大小>符号链接的大小(以字节为单位)。
如果使用--follow-symlinks,将显示以下错误消息:
<object> SP missing LF
在请求的初始符号链接不存在时打印。
dangling SP <size> LF
<object> LF
在初始符号链接存在时打印,但它(transitive-of)指向的符号链接不存在。
loop SP <size> LF
<object> LF
打印用于符号链接循环(或任何需要解析超过40个链接分辨率的符号链接)。
notdir SP <size> LF
<object> LF
在符号链接解析期间,当文件用作目录名时,将打印。
请注意,磁盘上对象的大小是准确报告的,但应该注意得出哪些引用或对象负责磁盘使用的结论。打包的非delta对象的大小可能远大于对其增量的对象的大小,但是选择哪个对象是基础并且delta是任意的并且在重新打包期间可能会发生变化。
还要注意,对象的多个副本可能存在于对象数据库中;在这种情况下,未定义将报告哪个副本的大小或增量基数。
部分 git [1] 套件