加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

假如非得相识下 GIT 体系… – 实践篇

发布时间:2018-09-20 18:21:57 所属栏目:移动互联 来源:野兽
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 git的界说是一个内容寻址文件体系。内容、寻址、文件、体系,该来的总会来的 本文旨在通过实践来先容.git文件夹中的目次及文件成果,属git基本常识。但在此基本上可办理各git行使进程中也许碰着的题目,如

验证下这个文件内容是什么,留意,这是个二进制球,呸…是文件,文明观球,呸…是寓目。这里我们用传说中git中的手术刀( git cat-file )来剖解git文件。

  1. git cat-file -p 442406aa9341668f9c43c2d5378a777ad69324a0 
  2. # 输出 a 

9de29bb2d1d6434b8b29ae775ad8c2e48c5391 是个二进制文件,是git工具中的blob工具,它记录了当前版本的该文件的数据内容,并以SHA-1计较发生一个40个字符的校验和。 按照官方描写:这是一个 SHA-1 哈希值——一个将待存储的数据外加一个头部信息(header)一路做 SHA-1 校验运算而得的校验和。

继承操纵,修改test

  1. vi test 
  2. # 第二行输入 b ,生涯,退出 
  3. git add test 
  4. find .git 
  5. # objects 下又多了个文件夹,且内里也有文件 
  6. # .git/objects/bf 
  7. # .git/objects/bf/daa0f1c3415c09d3080063911d155fd7259d18 

这次的二进制文件的数据内容是 a (手动换行) b 。

继承走下去:

  1. git commit -m “add test” 
  2. # wtf,怎么溘然生出2个文件夹,来来来,看看内容 
  3. # .git/objects/3e 
  4. # .git/objects/3e/5f95cd5c4f0ff429522b0fdfeda9369f92d89c 
  5. # .git/objects/fd 
  6. # .git/objects/fd/1332e4e95f8a64682c1516e175abb66b6f6325 
  7. git cat-file -t fd1332e4e95f8a64682c1516e175abb66b6f6325 
  8. # commit 
  9. git cat-file -p fd1332e4e95f8a64682c1516e175abb66b6f6325 
  10. # tree工具、作者、提交者、提交日期、提交信息、父工具(有的话带一个或多个父工具) 
  11. # tree 3e5f95cd5c4f0ff429522b0fdfeda9369f92d89c  
  12. # author yeshou <yeshou@xxx.com> 1535168447 +0800 
  13. # committer yeshou <yeshou@xxx.com> 1535168447 +0800 
  14. # add dir-test     
  15. git cat-file -t 3e5f95cd5c4f0ff429522b0fdfeda9369f92d89c 
  16. # tree 
  17. git cat-file -p 3e5f95cd5c4f0ff429522b0fdfeda9369f92d89c 
  18. # 100644 blob bfdaa0f1c3415c09d3080063911d155fd7259d18    test 
  19. git cat-file -p bfdaa0f1c3415c09d3080063911d155fd7259d18 
  20. # a (换行) b 

3e5f95cd5c4f0ff429522b0fdfeda9369f92d89c 也是个二进制文件,是git工具中的tree工具,记录着blob标识符、路径名和在一个tree下的全部文件的元数据。

fd1332e4e95f8a64682c1516e175abb66b6f6325 又是个二进制文件,是git工具中的commit工具,它记录了当前版本的一次提交数据内容,包括tree工具、作者、提交者、提交日期、提交信息、父工具(有的话带一个或多个父工具)。

然后,pack文件夹是干嘛的?

跟着objects文件夹下的文件夹和文件不绝天生(也就是N多次的commit之后),objects文件夹明明会”长大”,这时开拓者可以用 git gc 来对之前的操纵的工具做清算压缩。

pack 文件夹内有2个文件 pack-(SHA-1).pack 和 pack-(SHA-1).idx 前者是以压缩情势存储之前记录工具的文件,后者用以存储会见索引的文件。

举个例子:

  1. git gc  
  2. # Counting objects: 12, done. 
  3. # Delta compression using up to 4 threads. 
  4. # Compressing objects: 100% (4/4), done. 
  5. # Writing objects: 100% (12/12), done. 
  6. # Total 12 (delta 0), reused 0 (delta 0) 
  7. find .git 
  8. # 发明少了许多objects里的文件夹和文件,多了以下2个文件 
  9. # .git/objects/pack/pack-2021ec3cb18c796fdfca8ef616fb6a20b1449ab1.pack 
  10. # .git/objects/pack/pack-2021ec3cb18c796fdfca8ef616fb6a20b1449ab1.idx 
  11. git verify-pack -v .git/objects/pack/pack-2021ec3cb18c796fdfca8ef616fb6a20b1449ab1.idx 
  12. # 列出之前存在objects里的全部操纵数据内容 
  13. # 655a12c9b83a029bb46fa852ea15e6affd1587d8 commit 167 117 510 
  14. # ... 
  15. # 616dfdb2643c725fa1027ecef76d49d482d9e26d tree   32 43 670 
  16. # ... 
  17. # bfdaa0f1c3415c09d3080063911d155fd7259d18 blob   5 14 853 
  18. # 也可以通事后头加 | grep keyword 来搜刮所需的内容,如下列出全部commit记录 
  19. git verify-pack -v .git/objects/pack/pack-2021ec3cb18c796fdfca8ef616fb6a20b1449ab1.idx | grep commit 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读