命名
git-cat-file - 提供资源库对象的内容或类型和大小信息
概要
git cat-file (-t [--allow-unknown-type]| -s [--allow-unknown-type]| -e | -p | | --textconv | --filters ) [--path=] git cat-file (--batch | --batch-check) [ --textconv | --filters ] [--follow-symlinks]
描述
在第一种形式中,该命令提供存储库中对象的内容或类型。类型是必需的,除非-t或-p用于查找的对象类型,或-s用于查找对象的大小,或--textconv或--filters使用(其暗示型“斑点”)。
在第二种形式中,在 stdin 上提供了一个对象列表(由换行符分隔),每个对象的 SHA-1,类型和大小都打印在 stdout 上。使用可选参数可以覆盖输出格式。如果指定了其中之一--textconv或者--filters被指定,则输入需要列出对象名称,后跟路径名称,并用一个空格分隔,以便可以确定适当的驱动程序。
选项
要显示的对象的名称。有关拼写对象名称的更完整列表,请参阅 gitrevisions [7] 中的“指定修订”部分。
-t
显示由标识的对象类型而不是内容。
-s
显示由标识的对象大小,而不是内容。
-e
控制所有输出; 如果存在并且是有效的对象,则返回零状态。
-p
基于其类型 Pretty-print(漂亮地打印)的内容。
通常情况下,它匹配的实际类型,但是要求可以轻松地从给定取消引用的类型也是允许的。一个例子是要求一个“树”,其中是一个包含它的提交对象,或者要求一个作为指向它的标记对象。
--textconv
显示由 textconv过滤器转换的内容。在这种情况下,为了将过滤器应用于记录在索引处的内容, 必须采用 :或的形式。
--filters
显示由当前工作树中为给定配置的过滤器转换的内容(即涂抹过滤器,行尾转换等)。在这种情况下, 的格式必须是 :或。
--path=
与--textconv或--filters一起使用时,允许单独指定对象名称和路径,例如,当难以找出 blob 来自哪个版本时。
--batch --batch=
打印 stdin 上提供的每个对象的对象信息和内容。不能与其他选项或参数结合使用,除非--textconv或者--filters,在这种情况下,输入行还需要指定由空白分隔的路径。有关BATCH OUTPUT详情,请参阅下面的部分。
--batch-check --batch-check=
打印 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
对于常规文件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指定了其中一个。
如果-s指定,则以字节为单位的的大小。
如果-e指定,则不输出。
如果-p指定,则的内容将被打印出来。
如果指定,则会返回的原始(但未压缩的)内容。
批量输出
如果--batch或者--batch-check给出,cat-file将从标准输入读取对象,每行一个,并打印关于它们的信息。默认情况下,整行被认为是一个对象,就像它被馈送到 git-rev-parse [1] 一样。
您可以使用自定义指定每个对象显示的信息。它被逐字复制到每个对象的标准输出中,%(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没有自定义格式会产生:
SP SP LF LF
而--batch-check='%(objectname) %(objecttype)'会产生:
SP LF
如果在标准输入中指定了一个名称,该名称无法解析为存储库中的对象,cat-file则将忽略任何自定义格式并进行打印:
SP missing LF
如果使用--follow-symlinks,并且存储库中的符号链接指向存储库外部,cat-file则将忽略任何自定义格式并打印:
symlink SP LF LF
符号链接将是绝对的(以/开头),或者相对于树根。例如,如果 dir / link 指向 ../../foo,那么将是 ../foo。是符号链接的大小(以字节为单位)。
如果使用--follow-symlinks,则会显示以下错误消息:
SP missing LF
在请求的初始符号链接不存在时打印。
dangling SP LF LF
是在初始符号链接存在时打印的,但它(传递)指向的东西没有。
loop SP LF LF
是为符号链接循环(或任何需要超过40个链接分辨率才能解析的符号链接)打印的。
notdir SP LF LF
在符号链接解析期间,当文件被用作目录名称时,会打印该文件。
注意事项
请注意,磁盘上的对象大小是准确报告的,但应该小心确定哪些引用或对象负责磁盘使用。压缩的非 delta 对象的大小可能远远大于反对它的 delta 对象的大小,但是选择哪个对象是基础,哪个是 delta 是任意的,并且在重新包装期间可能会发生变化。
还要注意对象数据库中可能存在多个对象副本;在这种情况下,未定义将报告哪个副本的大小或增量基数。