Git知识笔记
当前项目开发使用Git来进行版本管理
当前有以下分支:
- Master:生产环境对应代码,最稳定的代码才能放入master
- Develop:开发环境对应代码,基本是项目的最新代码
- Test:测试环境对应代码,开发自测完毕之后要上测试环境之前的代码
- Hotfix:热补丁,用于补丁开发的代码
- UAT: 仿生产环境
初始开发的时候仍然是先获取ssh秘钥,然后通过git clone从iSource平台获取项目代码
在clone的时候不仅仅是会下载当前的最新代码,同时会下载当前项目的各个分支节点记录,所以当前项目仓库中的各个分支记录也会一并获取到;
clone到代码之后,首先git会根据你之前选择的远端分支来创建一个本地git的分支,这里我使用的是develop分支(与远端仓库的develop分支对应),然后Git会创建一个HEAD来表明当前选中的分支,这个时候HEAD就是指向develop的;
然后就可以开始码代码了,码了一些代码进入项目目录查看刚刚编辑的项目文件,发现Git系统已经识别到了这些文件的状态发生了改变,这个时候就需要先确保修改的文件加入了暂存区(Git ADD命令,实际在git clone的时候这些文件已经加入了暂存区,也可能是Tortoisegit自动识别文件加入暂存区),然后将改动提交到本地仓库当中去,提交完成之后,还需要将代码推送到远端仓库,在推送之前需要先将远端仓库的最新内容合并到本地仓库,然后再做提交,这里使用Git pull命令(Git Fetch+Git Merge 先获取远端存在而本地不存在的内容,然后再将其与本地仓库进行合并),然后再push到远端仓库,这个时候就可以使用最新的开发代码部署环境进行测试了
一般在提交完开发代码之后,确认代码没问题要把开发代码与测试代码进行合并,首先在本地创建一个Test分支(之前本地是只有一个develop分支的),创建完成之后,切换到本地的Test分支,然后从远端仓库拉取远端Test的内容,此时本地存在了两个分支,Test与Develop,但是HEAD已经切换到了Test分支上面,然后将本地的Test分支与远端的Develop分支进行合并(合并后本地Test分支已经包含了最新开发的代码了),最后将本地的Test分支push到远端Test,就可以让测试开搞了;
Git本质上是一个文件管理系统,不过在实现上面使用了分布式的概念,作为文件管理系统,Git会管理项目(当前大目录)下面的所有文件,负责文件的新增、删除、修改的操作;
在对项目进行初始化之后,项目目录下会生成一个.git目录,里面主要有几个重要的文件和目录
- objects:存储所有项目中的文件内容
- refs:存储分支信息
- HEAD:记录当前使用的分支
- index:存储当前Git系统暂存区信息
在Git中,系统一直记录的是文件的快照(文件的改动信息),Git会将文件的内容以及修改信息进行压缩后存储起来,使用Blob对象关联单个文件,Tree对象关联多个文件(整个项目的文档)
在进行commit的时候,其实主要是创建了一个关联了Tree对象的commit对象(以及commit的一些metadata)
后续:
文件改动怎么记录? 一并压缩然后存储到objects里面取?
分支合并怎么弄? 怎么识别出哪些该合并,哪些是冲突?