directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

命名

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 是任意的,并且在重新包装期间可能会发生变化。

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

Previous article: Next article: