Git是一个开源的分布式版本控制系统。
什么是版本控制系统?
举个例子:
当你的代码功能已经实现之后,你突然又有一个新的想法想要尝试一下,你又担心在将来新的想法没写好,原本已经写好的代码又无法恢复,这个时候该怎么办?
没有版本控制系统之前,你可以将原来的代码拷贝一份副本,在新的副本上尝试新的想法。当你又有新想法的时候,再拷贝一个副本,于是你的项目就变成了这个样子:
过了很久,你想找回你之前实现的某一个功能,但是已经不记得具体是放在哪一个副本当中了,只能一个个的项目去查找,特别麻烦。
更为麻烦的是,当你和你的同事共同去开发一个项目的时候,你们可能得通过U盘,网络文件传输等方式来同步代码,每次修改的时候还得非常注意,不然一不小心就与同事已经实现或者正在实现的功能冲突了,效率特别低下。
有了版本控制系统之后,以上的麻烦就都没有了,版本控制系统不但能自动记录每次文件的改动,还可以让同事协作编程,每次版本的更新都会有相应的记录,让你清晰地了解每个版本发生的变更信息,与同事协作的时候,也不用将项目文件传来传去,直接通过版本控制系统来进行远程同步就好了。
核心概念工作区工作区的内容就是你在电脑里能看到的内容,对应着本地文件。
版本库工作区有一个隐藏目录.git,里面存放的是版本库的内容。
暂存区一般存放在.git目录下的index文件(.git/index)中,暂存区有时也称为索引(index)。
暂存区属于版本库的一部分。
左侧为工作区,右侧为版本库。版本库中标记为index的区域是暂存区,标记为master的是目录树。
工作区主要对应电脑中我们看到的文件。
版本库包含三大部分:index、master和objects
HEAD是一个指向master的指针,图中的命令中出现HEAD的地方都可以用master来替换。
objects是Git的对象库,位于.git/objects目录下,里面包含了创建的各种对象及内容。
工作流程当我们添加或修改了一个文件之后,执行gitadd命令,将文件从工作区添加到暂存区中。暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
添加到暂存区之后,执行git