Git提交版本号
1. 提交版本号说明
在Git中,源码文件的版本号通常是通过Git的提交(commit)来管理的。每次你向Git仓库中提交更改时,Git都会为该提交使用SHA-1算法生成一个唯一的哈希值(通常是一个40位的十六进制字符串),这个哈希值可以看作是代码状态的版本号,又被称为提交码。
2. 提交码特点
- 唯一性: 每次提交产生的哈希都是唯一的,能够确保每个版本都可以被唯一标识。(这也就是分布式代码管理中版本号避免冲突的设计)
- 结构: 提交哈希的生成考虑了提交内容、作者信息、时间戳等,因此即使只是对文件的微小修改,生成的哈希也会完全不同。
3. 定位本地提交文件位置
本地提交的代码版本号是可以追踪git仓库中的位置,也就是说可以通过版本号了解到我们提交的代码提交到.git文件夹中具体的位置:
可以看到最新的版本号是e87a9a347f93c5476cd3adac33844f72436bd398,前面e8就是.git的存储的文件夹信息,如下图所示:
4. 通过提交码查看文件
如果直接使用记事本打开,会发现是乱码,git提供命令行工具查看我们提交的文件内容: 命令中
cat-file
表示查看文件,-p
表示通过阅读友好的方式,后面跟上提交码: 其中命令返回内容中tree表示目录结构信息,包括该目录下的文件和子目录。每个 tree 对象可以包含指向以下对象的指针:
- 指向blob对象的指针(文件的内容)
- 指向其他tree对象的指针(子目录)
查看dfe0770424b2a19faf507a501ebfc23be8f54e7b版本号内容,其中返回信息中blob表示git文件块: 由于本地做的删除文件提交,所以提交的文件只有.gitattributes,可以理解删除操作就是通过指定文件不做提交仓库实现的,可以查看.gitattributes文件在仓库中的内容:
使用记事本打开.gitattributes文件,可以看到git仓库存储的文件内容的确就是这个:
整个流程提交版本号变化的同时,可以看到文件提交的整个过程:
5. 分支管理
git仓库中提交这么多次,到底那个开发者的那次提交才是最新的提交码呢?git需要管理维护最新的提交码,以便于后续提交git能够能够记录各个提交的父子关系。在git仓库文件中有一个HEAD文件:
里面记录了当前分支的信息,打开HEAD文件: 可以看到当前分支在main上,查看这个路径的文件:
其中e87a9a347f93c5476cd3adac33844f72436bd398就是main分支最新提交码。
创建user分支并切换到user分支上: 再次查看HEAD文件,可以看到main已经变成了user:
查看该路径下,的确有两个文件,各自记录最新的提交码信息:
整个流程如图所示:
6. git操作区域说明
整个流程如下图所示,有可能不需要比对,比如设置了.ignore文件。