Git 版本控制与存储模型
Git 是什么,为什么要使用 Git
想象一个场景:你写了一个文件,版本是 1.0,现在你需要修改,优化内容,又怕把原来的文件丢掉,于是将 1.0 版本的文件拷贝了一份,在这个副本上进行修改。
两个文件尚不能造成太多困扰,然而实际学习和工作中,经常遇到一个项目中有多个文件,每个文件的修改次数都不少,团队合作时,每个人都需要同步地更新进度,才能保证各自更新、沟通的部分不会出错。这导致版本管理非常难,造成了很大的脑力和人力成本。
Git 就是为解决这个问题而诞生的。Git 是一种版本控制系统,会帮助工作者,记录每一次提交的更新,而工作者不必手动地创建副本、合并更新、管理版本历史。在团队协作时,也不需要某个管理者主动分发历史记录和新版本给其他成员,项目成员可以直接从任意一个保存了完整版本记录的机器(比如一个专门的中央服务器)上,远程拷贝、拉取一份相同的记录,创建自己的工作分支,将自己的更新推送回去。每个成员完成各自的任务并推送后,管理者通过 Git 对这些分支进行检查,合并,就完成了总项目的版本更新。
分布式系统、本地化存储
Git 被设计为分布式存储管理系统,参与项目的每台机器上都有一个完整的版本库,对于版本历史的提交与修改,也是在本地完成。对于该台机器的使用者而言,可以很快的切换版本与分支,而不必通过网络获取版本信息。
需要和其他机器的版本历史进行交互,比如克隆、远程推送,统一归纳合并时,才需要网络。
至于所谓【中央服务器】,只是为了方便,设置一个拥有干净、完整版本历史记录的服务器,便于发布、管理、标准化,不代表 Git 不是分布式系统。
存储项目随时间改变的快照(snapshot)
每次的更新提交/保存项目状态时,Git 会对当时的全部文件创建一个快照(snapshot)并保存索引/指针。当然,没有修改的文件就不必重新创建快照并存储,只要保留链接,指向之前的文件即可。因此在改变、查看不同版本的文件时,Git 通过改变索引/指针的方式,就可以进行替换,而不必重新计算差别,这是 Git 版本切换比较快的原因。
