Check object existence or emit object contents
-e check if <object> exists
-p pretty-print <object> content
Emit [broken] object attributes
-t show object type (one of 'blob', 'tree', 'commit', 'tag', ...)
-s show object size
--allow-unknown-type allow -s and -t to work with broken/corrupt objects
Batch objects requested on stdin (or --batch-all-objects)
--batch[=<format>] show full <object> or <rev> contents
--batch-check[=<format>]
like --batch, but don't emit <contents>
--batch-all-objects with --batch[-check]: ignores stdin, batches all known objects
Change or optimize batch output
--buffer buffer --batch output
--follow-symlinks follow in-tree symlinks
--unordered do not order objects before emitting them
Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)
--textconv run textconv on object's content
--filters run filters on object's content
--path blob|tree use a <path> for (--textconv | --filters ); Not with 'batch'
旧用法为:
<type> can be one of: blob, tree, commit, tag
-t show object type
-s show object size
-e exit with zero when there's no error
-p pretty-print object's content
--textconv for blob objects, run textconv on object's content
--filters for blob objects, run filters on object's content
--batch-all-objects show all objects with --batch or --batch-check
--path <blob> use a specific path for --textconv/--filters
--allow-unknown-type allow -s and -t to work with broken/corrupt objects
--buffer buffer --batch output
--batch[=<format>] show info and content of objects fed from the standard input
--batch-check[=<format>]
show info about objects fed from the standard input
--follow-symlinks follow in-tree symlinks (used with --batch or --batch-check)
--unordered do not order --batch-all-objects output
5条答案
按热度按时间f8rj6qna1#
add to @Matoeil答案,您只需指定
<SHA1>
的5个字符。here解释得很好。
jm81lzqq2#
git cat-file -Cat(concatenate)命令它从文件中读取数据并输出内容。
velaa5lx3#
虽然
cat
确实代表“concatenate”,但它实际上只是按照cat
的命令行参数中出现的顺序显示一个或多个文件。在Linux或 *nix系统上 * 查看 * 文件内容的常见模式是:cat
和Git的cat-file
的主要区别在于它只显示一个文件(因此有-file
部分)。它只是对cat
命令行为的引用。git-cat-file
-提供存储库对象的内容或类型和大小信息从技术上讲,如果您使用“批处理输出”模式,则可以使用
git cat-file
连接文件:批次输出
如果给定
--batch
或--batch-check
,cat-file
将从stdin读取对象,每行一个,并打印有关它们的信息。默认情况下,整行都被视为一个对象,就像它被馈送到git-rev-parse
[1]一样。c7rzv4ha4#
读取git对象的内容(或blob)
读取其类型
cetgtptt5#
cat和Git的cat-file的主要区别在于它只显示一个文件(因此有-file部分)
单个文件,...或
list
个单个文件。在第二种形式中,在stdin上提供对象列表(由换行符分隔),并在stdout上打印每个对象的SHA-1、类型和大小。
可以使用可选的
<format>
参数覆盖输出格式。当您考虑
git cat-file --batch
时,这一点非常重要,git cat-file --batch
会打印stdin上提供的每个对象的对象信息和内容。另请参阅
git cat-files --batch-command
with Git 2.36 (Q2 2022)。随着Git 2.34(Q4 2021)的推出,驱动“
git for-each-ref
“(man)的“--format
“选项的“ref-filter
“机制和它的朋友们进化了,将被用于"git cat-file --batch
(man)"。参见Junio C Hamano (
gitster
)的commit bff9703(2021年7月1日)。请参见ZheNing Hu (
adlternative
)的commit b9dee07、commit e85fcb3、commit 7121c4d、commit bd0708c、commit 311d0b8(2021年7月26日)。(2021年8月24日,由Junio C Hamano --
gitster
--在commit bda891e中合并)第1001章:添加%(剩余)原子
审核人:雅各布·凯勒
建议人:雅各布·凯勒
推荐人:克里斯蒂安·库德
推荐人:哈里翁·维尔马
签署人:胡哲宁
%(rest)
是用于cat文件批处理模式的原子,它可以在第一个空格边界处分割输入行,该空格之前的所有字符都被认为是对象名;在第一个空白字符之后的字符(即,该行的“剩余”)被输出以代替%(剩余)原子。为了让“
cat-file --batch=%(rest)
“使用ref-filter
接口,请为ref-filter
添加%(rest)
原子。引入
reject_atom()
来拒绝原子%(rest)
,以表示“git for-each-ref
“(man)、“git branch
“(man)、“git tag
“(man)和”git verify-tag
“。因此,两个命令应返回相同的结果:
相同于:
请注意,在Git 2.36(2022年第二季度)中,“
git cat-file --help
“(man)更加清晰。请参见第一次电子邮件发送的第24次电子邮件、第25次电子邮件(2022年1月10日)和第一次电子邮件发送的第26次电子邮件、第27次电子邮件、第28次电子邮件、第29次电子邮件、第30次电子邮件、第31次电子邮件、第32次电子邮件、第33次电子邮件、第34次电子邮件和第35次电子邮件(2021年12月28日)。
(由Junio C Hamano --
gitster
--合并到commit 008028a,2022年2月5日)签署人:埃瓦·阿恩菲约德·比贾马森
更改“
git cat-file
“(man)-h上发出的用法输出,以分组相关选项,使用户清楚地了解哪些选项与哪些其他选项匹配。新输出为:
旧用法为:
虽然较短,但我认为新的更容易理解,因为Eidogg.“X1 M28 N1 X“与“X1 M29 N1 X“和“X1 M30 N1 X“分组,因为它只能与这些选项组合。
对于“
--buffer
“、“--unordered
“等也是如此。仍然在Git 2.36(Q2 2022)中,优化掉
strbuf_expand()
调用,在git中使用cat-file”的--batch
和--batch-check
选项,使用一个特定于默认格式的硬编码格式化逻辑。参见commit eb54a33(2022年3月15日),作者John Cai (
john-cai
)。(2022年3月23日,由Junio C Hamano --
gitster
--在commit 889860e中合并)签署人:埃瓦·阿恩菲约德·比贾马森
签署人:蔡约翰
当格式传递到
--batch
、--batch-check
、--batch-command
时,格式会展开。如果没有传入任何内容,则设置默认格式并调用
expand_format()
。我们可以通过硬编码来保存这些周期,当没有传递任何格式或者传递了默认格式时,如何打印信息。
默认情况下不需要完全展开的格式。
由于
batch_object_write()
发生在批处理模式中提供的每个对象上,因此我们获得了很好的性能改进。带有HEAD^:
带有HEAD:
如果未提供任何内容作为格式参数,或者如果传递了默认格式,则跳过格式的扩展,并使用默认格式打印对象信息。
请参阅this discussion。
git cat-files
和cat:
mail-mapping之间的另一个区别是:Map作者/提交者姓名和/或电子邮件地址的能力。在Git 2.38(Q3 2022)中,“
git cat-file
“(man)学习了一个选项,可以在显示提交和标记对象时使用mailmap。请参见Siddharth Asthana (
edith007
)、commit 66a8a95、commit dc88e34、commit e9c1b0e(2022年7月19日),作者为Siddharth Asthana (edith007
)。(由Junio C Hamano --
gitster
--合并至commit 87098a0,2022年8月3日)第1011章:添加mailmap支持
推荐人:克里斯蒂安·库德
推荐人:蔡约翰
帮助人:菲利普伍德
协助人:约翰内斯·申德林
签署人:悉达多·阿斯塔纳
git-cat-file
(man)被GitLab之类的工具用来获取提交标签的内容,然后显示给用户。具有作者、提交者或标记者信息的该内容在被发送或显示之前可以受益于通过mailmap机制。
此Patch将
--[no-]use-mailmap
指令行选项新增至git cat-file
指令。它还将
--[no-]mailmap
选项作为别名添加到--[no-]use-mailmap
。git cat-file
现在在其手册页中包括:--[no-]mailmap
的第一个字符串--[no-]use-mailmap
的第一个字符使用mailmap文件将作者、提交者和标记者的姓名和电子邮件地址Map到规范的真实的姓名和电子邮件地址。请参阅
git shortlog
。