Git 原理
git clone之后究竟发生了什么?
- remote repository:这个不用过多解释,虽然git是分布式的代码管理工具,但大部分公司,组织都会建立一个集中的代码仓库服务器。(这里想到区块链到底后面会发展成半集中式还是完全分布式的呢?)该代码仓库存储着所有开发人员push上去的代码和branchs
- 开发者键入git clone后,git会将远端所有的代码和branchs下载到开发者本地。
- 有人会问,可是我git branch只看到一个branch(默认情况应该是master branch。不过仓库服务端可以进行配置其他任意branch为默认主分支)。git branch的确只能看到一个branch(在本地没有进行checkout -b参操作的情况下),因为其他branch需要用git banch -r(Git branch -a)才能看到。
- 这时有人又会问,git branch -r看到的不是远端的分支吗?好吧,其实本文的唯一有价值的地方就在这里了。git branch -r看到的不是远端服务的branchs,而是你的本地的远端 branchs,git clone后在remote/origin repository区保存一份和此时远端分支一模一样的代码和branchs,而且该区域是不能修改的。
- 如果想修改怎么办,git checkout -b master origin/master相信大家都用过类似的命令,这个是从远端拉出一个branch吗?不是,这是从你的本地的远端区域里的master branch拉出一个branch。而新拉出的branch就是存储在你的local repository区域里,这个区域是可以修改的,也就是git branch看到的那些branchs。
理解了以上两个区域后面有些命令的原理就十分清楚了
- git pull做了什么?
- 大家都知道git pull = git fetch + git merge两个操作。
- git fetch做了什么?
- git fetch其实是更新下你的本地的远端代码区域(remote/origin repository)的数据同服务端的代码保持一致。
- 基于以上的说明,git pull的最后一步,就是把remote/origin repository区域中的相应的branch(已更新到服务端最新代码) merge到本地区域(local repository)的branch上。
以上是自己对git对代码管理上的一些理解,不保证正确性,因为我没有看过一行git源码,以上的分析只是从各种文章,流程图,以及实际使用中推理得出的。只是感觉它应该就是这一个样子的。希望没有误导别人
转自 https://blog.csdn.net/voidreturn/article/details/78695615 侵删