热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

git学习笔记二

第五:对于git对象的理解和实例分析[root@localhost~]#cdgit[root@localhostgit]#mkdirobject[root@localhostobject]#vimmain.cHellownayan![root@localhostobject]#githash-objectmain.c计算main.c的哈希值d32fe487dc38cbfc7

 

第五:对于git对象的理解和实例分析

[root@localhost ~]# cd /git/

[root@localhost git]# mkdir object

[root@localhost object]# vim main.c

 

Hello wnayan!  

[root@localhost object]# git hash-object main.c   //计算main.c的哈希值

d32fe487dc38cbfc7fe051a5d6dbae01551d8dbd

[root@localhost object]# git init

Initialized empty Git repository in /git/object/.git/

[root@localhost object]# git add .

以下这个文件(blob)就是保存mia.c内容的文件

[root@localhost object]# ll .git/objects/d3/

total 8

-r--r--r-- 1 root root 30 Nov 27 04:02 2fe487dc38cbfc7fe051a5d6dbae01551d8dbd

[root@localhost object]# git commit -m "1st commint"

[master (root-commit) da97249] 1st commint

 1 files changed, 1 insertions(+), 0 deletions(-)

 create mode 100644 main.c

[root@localhost object]# find .git/objects/ -type f  //列出文件夹下的普通文件

.git/objects/ae/eedc3b20507db9600f7f72431557fcf9303252

.git/objects/d3/2fe487dc38cbfc7fe051a5d6dbae01551d8dbd

.git/objects/da/97249d3649b1770b5cec8fa515833ea596f26f

[root@localhost object]# git show d32f  //查看blob的内容,就是main.c的一样的内容

Hello wnayan!

[root@localhost object]# git cat-file -t aeeedc   //这三句是查看object的类型

tree

[root@localhost object]# git cat-file -t da97 

commit

[root@localhost object]# git cat-file -t d32f

blob

以上三种对象中tree保存文件的名字,blob保存文件的内容,这种结构有利于两个内容相同但是名字不同的文件的保存(tree保存两个名字,blob保存一份内容就可以了)

[root@localhost object]# git ls-tree aeee   //列出treeblob的对应关系

100644 blob d32fe487dc38cbfc7fe051a5d6dbae01551d8dbd      main.c

[root@localhost object]# git show -s --pretty=raw da97  //查看commit的内容,关系很明确

commit da97249d3649b1770b5cec8fa515833ea596f26f

tree aeeedc3b20507db9600f7f72431557fcf9303252

author ethnicitybeta 1322337880 +0800

committer ethnicitybeta 1322337880 +0800

 

1st commint

第六:多层目录的实例

[root@localhost /]# mkdir -p /git/wanyan

[root@localhost /]# cd /git/wanyan/

[root@localhost wanyan]# cat README

just test!

[root@localhost wanyan]# cat lib/comment

include

[root@localhost wanyan]# cat lib/include/main.c

main

[root@localhost wanyan]# git init

Initialized empty Git repository in /git/wanyan/.git/

[root@localhost wanyan]# git add .

[root@localhost wanyan]# git commit -m "1st version"

[master (root-commit) 206ecf2] 1st version

 3 files changed, 3 insertions(+), 0 deletions(-)

 create mode 100644 README

 create mode 100644 lib/comment

 create mode 100644 lib/include/main.c

[root@localhost wanyan]# find .git/objects/ -type f  //查看生成的对象

.git/objects/03/e86fb4437c4153cec24aa4021dca582abc0558

.git/objects/56/2f7710be64f9309a9fe6aa529753953dbe7e47

.git/objects/20/6ecf269d0f540995d88d6be825fecb09b5d3eb

.git/objects/8f/006adb88a619f20442a9eb3148cff31691eaf0

.git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a

.git/objects/90/48a2fd8c21a70a2dffcf80c819eee2fb491a31

.git/objects/a1/a869c8c840478164594a788ae5ce38dc0ee6da

[root@localhost wanyan]# git cat-file -t 03e8  //可以通过这个命令依次查看对象的类型

tree

[root@localhost wanyan]# ll .git/HEAD   

-rw-r--r-- 1 root root 23 Nov 27 04:23 .git/HEAD  //当前使用的commitmaster

[root@localhost wanyan]# cat .git/HEAD

ref: refs/heads/master

 [root@localhost wanyan]# cat .git/refs/heads/master

206ecf269d0f540995d88d6be825fecb09b5d3eb

[root@localhost wanyan]# git cat-file -t 206e

commit

接下来就是修改任意的文件,来生成第多个版本的测试

[root@localhost wanyan]# cd lib/

[root@localhost lib]# cat comment

include

change

[root@localhost wanyan]# git commit -a -m "2nd commit"  //这个命令是那两个命令的综合

[master a7772df] 2nd commit

 1 files changed, 1 insertions(+), 0 deletions(-)

[root@localhost wanyan]# find .git/objects/ -type f   //可以发现对象明显的增加

.git/objects/5f/eaaa33f5f3b3bc5fae0b750b2a5ebdc74b0a27

.git/objects/03/e86fb4437c4153cec24aa4021dca582abc0558

.git/objects/56/2f7710be64f9309a9fe6aa529753953dbe7e47

.git/objects/57/440fcc9bc816076d418a2da304a2498b928bae

.git/objects/20/6ecf269d0f540995d88d6be825fecb09b5d3eb

.git/objects/8f/006adb88a619f20442a9eb3148cff31691eaf0

.git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a

.git/objects/90/48a2fd8c21a70a2dffcf80c819eee2fb491a31

.git/objects/a1/a869c8c840478164594a788ae5ce38dc0ee6da

.git/objects/a7/772df6deb98005cf5ee21ae3ea863296677923

.git/objects/2c/f3d62adf771c30fa8062ce2c491d14486ea5ee

接下来这个步骤就是来打tagtag分为轻量级的和全面包含的

首先是轻量级的tag这个tag虽然是对象,但是并不在对象目录里显示(object目录)

[root@localhost wanyan]# git tag v1.0

[root@localhost wanyan]# ll .git/refs/tags/

total 8

-rw-r--r-- 1 root root 41 Nov 27 04:50 v1.0

[root@localhost wanyan]# cat .git/refs/tags/v1.0   //可以发现内容是commit

a7772df6deb98005cf5ee21ae3ea863296677923

[root@localhost wanyan]# git cat-file -t a777

commit

然后是全面包含的tag,目录里显示(object目录)

[root@localhost wanyan]# git tag -a stable1.0 -m "1st stable"

[root@localhost wanyan]# find .git/objects/ -type f

.git/objects/5f/eaaa33f5f3b3bc5fae0b750b2a5ebdc74b0a27

.git/objects/03/e86fb4437c4153cec24aa4021dca582abc0558

.git/objects/56/2f7710be64f9309a9fe6aa529753953dbe7e47

.git/objects/57/440fcc9bc816076d418a2da304a2498b928bae

.git/objects/20/6ecf269d0f540995d88d6be825fecb09b5d3eb

.git/objects/8f/006adb88a619f20442a9eb3148cff31691eaf0

.git/objects/ba/2906d0666cf726c7eaadd2cd3db615dedfdf3a

.git/objects/90/48a2fd8c21a70a2dffcf80c819eee2fb491a31

.git/objects/a1/a869c8c840478164594a788ae5ce38dc0ee6da

.git/objects/a7/772df6deb98005cf5ee21ae3ea863296677923

.git/objects/8a/26be084ddce5e8178ca91def21e0c8f7a0945e

.git/objects/2c/f3d62adf771c30fa8062ce2c491d14486ea5ee

[root@localhost wanyan]# git cat-file -t 8a26

Tag

接下来演示tag的使用

[root@localhost wanyan]# vi README   //修改一下

 

just test!

another hang!

[root@localhost wanyan]# git commit -a -m "3rd commit"

[master a08fc01] 3rd commit

 1 files changed, 1 insertions(+), 0 deletions(-)

[root@localhost wanyan]# cat README

just test!

another hang!

下边的操作演示的是把tag那个状态(修改之前),那个打包出去

[root@localhost wanyan]# git archive --format=tar --prefix=wanyan/ v1.0 | gzip > /tmp/wanyan.tar.gz

[root@localhost wanyan]# cd /tmp/

[root@localhost tmp]# tar zxvf wanyan.tar.gz

wanyan/

wanyan/README

wanyan/lib/

wanyan/lib/comment

wanyan/lib/include/

wanyan/lib/include/main.c

[root@localhost tmp]# cd wanyan

[root@localhost wanyan]# cat README   //是不是发现又是tag那个状态的文件

just test!

总结:之前有接触版本控制的概念,仅有的名词概念是svn,还没来得及做研究,这里接触了git感觉十分的好用,在这里做一个系统的学习记录下来,以备工作时使用,再次感谢小布老师的无私授课。


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 使用 SourceTree 管理 SVN 代码仓库的详细指南
    SourceTree 是一款功能强大的 Git 管理工具,但很多人不知道它同样支持管理 SVN 代码仓库。本文将详细介绍如何使用 SourceTree 来管理和操作 SVN 代码仓库。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在开发过程中,为了确保代码的实时保存,我们常常会对某个功能进行多次提交。然而,当功能趋于稳定时,将这些分散的提交记录合并为一次提交,可以提高代码仓库的整洁度和可维护性。本文将详细介绍如何使用 Git 巧妙地合并多次提交记录,帮助开发者简化历史记录管理。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 一个初秋的雨夜,我独自漫步在校园的小道上,心中突然涌起对理想爱情的憧憬。这篇文章将分享我对理想伴侣的期望,以及与他共度美好时光的愿景。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • Spring 切面配置中的切点表达式详解
    本文介绍了如何在Spring框架中使用AspectJ风格的切面配置,详细解释了切点表达式的语法和常见示例,帮助开发者更好地理解和应用Spring AOP。 ... [详细]
  • 自Emacs 24.1版本起,Emacs引入了ELPA(Emacs Lisp Package Archive)作为其内置的包管理系统,用于管理和安装来自互联网的扩展插件。本文将指导您如何配置Emacs以使用MELPA这一知名且丰富的第三方插件源。 ... [详细]
  • 本文详细介绍了 ASP.NET 中用于文件上传的控件及其使用方法,包括常见的 FileUpload 控件和其他相关技术。 ... [详细]
  • 本文介绍如何使用命令行工具查看和解析 iOS 应用崩溃日志,包括 UUID 和错误代码位置的详细步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了一种在ANSI C中动态分配二维数组的方法。通过创建指针数组并为每个指针分配连续空间,可以灵活地管理内存。文章还讨论了一些常见的错误和注意事项。 ... [详细]
author-avatar
蔚蓝的希望_674
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有