什么`cat-file`代表git?

时间:2016-07-04 04:35:56

标签: git

在git中,cat-file在此命令中代表什么?

$ git cat-file <...>

我的第一个想法是“连接文件”,因为Unix命令cat代表“连接”,但这与git cat-file的功能不对应。

3 个答案:

答案 0 :(得分:7)

读取git对象的内容(或blob)

  git cat-file -p <SHA1>

阅读其类型

  git cat-file -t <SHA1>

答案 1 :(得分:5)

虽然cat确实代表“连接”,但它实际上只是显示一个或多个文件,它们在cat的命令行参数中出现。在Linux或* nix系统上查看文件内容的常见模式是:

cat <file>

cat和Git cat-file之间的主要区别在于它只显示一个文件(因此-file部分)。 Git的cat-file并不真正代表“连接”;它只是对cat命令行为的引用。

  

git-cat-file - 提供存储库对象的内容或类型和大小信息

从技术上讲,如果使用批量输出模式,可以使用git cat-file连接文件:

  

批量输出

     

如果给出--batch--batch-checkcat-file将从stdin中读取对象,每行一个,并打印有关它们的信息。默认情况下,整行被视为一个对象,就好像它被送到git-rev-parse [1]。

答案 2 :(得分:0)

添加到@Matoeil答案, 您只需要在<SHA1>中指定5个字符。

$ tree .git/

.git/
├── COMMIT_EDITMSG
├── HEAD
├── config
├── description
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── prepare-commit-msg.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           ├── master
│           └── testBranch
├── objects
│   ├── 1e
│   │   └── e2a78c0b40dd8e5c6b08e31171a3ce1e8d931b
│   ├── 29
│   │   └── 33b9017f79a27ff5ad3c4e154f67b44ae8482c
│   ├── 4a
│   │   └── 6a376085b9b3b8e6e73d2cdcc5281cf6915c58
│   ├── 4b
│   │   └── 825dc642cb6eb9a060e54bf8d69288fbee4904
│   ├── 7e
│   │   └── 6965a8b2ff07da3e632a24ee024b9d2ec5245d
│   ├── ae
│   │   └── 853f7ece778281c463c1f0c603ef9d47a425b7
│   ├── info
│   └── pack
└── refs
├── heads
│   ├── master
│   └── testBranch
└── tags

17 directories, 28 files

$ git cat-file -t ae853
tree 

$ git cat-file -p ae853
100644 blob 7e6965a8b2ff07da3e632a24ee024b9d2ec5245d    fil1.txt 

here解释得很好。