Skip to content

Git提交版本号

1. 提交版本号说明

在Git中,源码文件的版本号通常是通过Git的提交(commit)来管理的。每次你向Git仓库中提交更改时,Git都会为该提交使用SHA-1算法生成一个唯一的哈希值(通常是一个40位的十六进制字符串),这个哈希值可以看作是代码状态的版本号,又被称为提交码。

2. 提交码特点

  1. 唯一性: 每次提交产生的哈希都是唯一的,能够确保每个版本都可以被唯一标识。(这也就是分布式代码管理中版本号避免冲突的设计)
  2. 结构: 提交哈希的生成考虑了提交内容、作者信息、时间戳等,因此即使只是对文件的微小修改,生成的哈希也会完全不同。

3. 定位本地提交文件位置

本地提交的代码版本号是可以追踪git仓库中的位置,也就是说可以通过版本号了解到我们提交的代码提交到.git文件夹中具体的位置:
Alt text
可以看到最新的版本号是e87a9a347f93c5476cd3adac33844f72436bd398,前面e8就是.git的存储的文件夹信息,如下图所示:
Alt text

4. 通过提交码查看文件

如果直接使用记事本打开,会发现是乱码,git提供命令行工具查看我们提交的文件内容:
Alt text 命令中cat-file表示查看文件,-p表示通过阅读友好的方式,后面跟上提交码:
Alt text 其中命令返回内容中tree表示目录结构信息,包括该目录下的文件和子目录。每个 tree 对象可以包含指向以下对象的指针:

  • 指向blob对象的指针(文件的内容)
  • 指向其他tree对象的指针(子目录)

查看dfe0770424b2a19faf507a501ebfc23be8f54e7b版本号内容,其中返回信息中blob表示git文件块:
Alt text 由于本地做的删除文件提交,所以提交的文件只有.gitattributes,可以理解删除操作就是通过指定文件不做提交仓库实现的,可以查看.gitattributes文件在仓库中的内容:
Alt text 使用记事本打开.gitattributes文件,可以看到git仓库存储的文件内容的确就是这个:
Alt text 整个流程提交版本号变化的同时,可以看到文件提交的整个过程:
Alt text

5. 分支管理

git仓库中提交这么多次,到底那个开发者的那次提交才是最新的提交码呢?git需要管理维护最新的提交码,以便于后续提交git能够能够记录各个提交的父子关系。在git仓库文件中有一个HEAD文件:
Alt text
里面记录了当前分支的信息,打开HEAD文件:
Alt text 可以看到当前分支在main上,查看这个路径的文件:
Alt text 其中e87a9a347f93c5476cd3adac33844f72436bd398就是main分支最新提交码。
创建user分支并切换到user分支上:
Alt text 再次查看HEAD文件,可以看到main已经变成了user:
Alt text 查看该路径下,的确有两个文件,各自记录最新的提交码信息:
Alt text 整个流程如图所示:
Alt text

6. git操作区域说明

整个流程如下图所示,有可能不需要比对,比如设置了.ignore文件。
Alt text