git-hash-object 命令

该命令可以计算指定对象的object ID,并且通过指定参数(-w)将指定对象写入数据库中。该ID是个SHA-1哈希值,通过将待存储的数据内容(指定对象内容)加一个头部信息(header)一起做SHA-1校验运算得到的校验和。

命令格式

1
2
git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin [--literally]] [--] <file>…​
git hash-object [-t <type>] [-w] --stdin-paths [--no-filters]

命令参数选项

  • -t <type>: 对象类型, 默认为数据对象blob object
  • -w: 设置该参数表示要将对象内容写入数据库
  • –stdin: 表示从标准输入读取对象内容
  • –stdin-paths: 表示从标准输入读取保存对象内容的文件名,每行表示一个文件
  • –: 标记后续参数类型,即 – 后面的参数会被解析为file

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost gitNewTest]# find .git/objects -type f
# 从标准输入读取内容写入数据库
[root@localhost gitNewTest]# echo "hello world" |git hash-object -w --stdin
3b18e512dba79e4c8300dd08aeb37f8e728b8dad
[root@localhost gitNewTest]# find .git/objects -type f
.git/objects/3b/18e512dba79e4c8300dd08aeb37f8e728b8dad
[root@localhost gitNewTest]# tree .git/objects/
.git/objects/
├── 3b # SHA-1哈希值前两个字符做目录
│   └── 18e512dba79e4c8300dd08aeb37f8e728b8dad # SHA-1哈希值剩余38个字符做文件名
├── info
└── pack

3 directories, 1 file

# 从文件中读取内容写入数据库
[root@localhost gitNewTest]# echo 'version 1' > text.txt
[root@localhost gitNewTest]# cat text.txt
version 1
[root@localhost gitNewTest]# git hash-object -w text.txt
83baae61804e65cc73a7201a7252750c76066a30