通常,svn的代码库位于另一台机器,每次提交代码,就会在远端的代码库中产生一次提交历史(包含我们为每次提交写下的描述等附属信息)。整个过程完全依赖网络。在没有网络的环境中,开发人员甚至无法查看任何文件的提交历史。
相比之下,git最大的优势便是:将代码库以“.git”目录的形式存放在本地项目中。从而保证每次提交(commit)可以不依赖网络环境。
问:Git如何解决多人协作开发呢?
答:Git支持对版本库进行操作!
啥?我没说明白?请听我解释。Git、svn、cvs,vss等版本库,它们共同点之一是:所有的提交操作都是将代码提交至版本库;更新操作都是从版本库更新代码到本地。所以,这两个操作都是围绕本地代码和版本库进行的。换言之,在这两个动作中,主角是“本地代码”和“版本库”。
同样类似的操作,git却允许主角是“自己的版本库”和“别人的版本库(远端库)”。也就是说git支持版本库之间互相更新和提交代码。只不过git为这两个主角的新戏起了两个新名字:拉取(fetch),推送(push)。团队成员之间通过同步各自版本库的方式实现协作开发。
Fetch是将远端库更新到本地库,Push是将本地库提交到远端库。当然,前提是两个版本库必须来自同一个项目地址(都是clone自同一个git地址)。
正常的项目开发中,团队会创建一个公用版本库作为主库(通过gitlab、gitolite等第三方工具使其支持远程fetch和push),工程师会将自己的版本库(提交过的代码)push到主库;将主库的代码fetch到自己的版本库。
你可能会猜到,fetch是不会影响到本地代码的。也就是说,即使用了fetch命令也只会影响到本地版本库,并不会对本地代码产生影响。如果需要将自己最新版的版本库更新到工作目录中,需要再用到合并命令(merge),这一步你可以理解为SVN中的update操作。
问:能否把远端库的代码一步直接更新到本地开发目录中?
答:使用pull命令(pull命令封装了fetch和merge)
总结:正是因为支持了团队成员之间同步各自版本库,Git才实现了多成员的协作开发。也正因如此,git被称之为分布式的版本控制工具。
领取专属 10元无门槛券
私享最新 技术干货