Git clone之后你的硬盘上究竟发生了什么?

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78695615 网上...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/78695615

网上关于Git的使用有太多的博客,文章在讲解了,大部分是在讲解命令的用法,剩下一部分则在讲解git的内部原理,看过讲解基础命令使用的文章后,正常的开发使用是没有什么问题的了,而如果想更深入的了解git“高级”使用,去看第二类讲解内部原理(数据结构,源码实现)的文章,往往感觉过于“高深”,复杂,(而且对git的使用上并不会有太多帮助),其实介于两者之间的知识可能对于git进阶更有帮助。

Git的原理和使用其实很简单,看懂下面这张图就可以了:

一张覆盖了git大部分知识的图片

上图转自伯乐在线上的一篇文章,侵删。

其实我感觉这应该是某一本讲解git原理的书上的配图(由于学习git过程中都是网上搜索和自悟获取,没有看过专门的git书籍,不太清楚是那本书)

为了符合文章的标题,这里只简单说明下右半部分,这个是大部分基础使用文章忽略的(基础使用都会着重讲解staging area这部分),而高级教程中对于右半边又都是一笔带过,或者大家都不会太注意这部分吧。

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源码,以上的分析只是从各种文章,流程图,以及实际使用中推理得出的。只是感觉它应该就是这一个样子的。希望没有误导别人。

最后说下我对git的看法:git不仅仅是一个代码管理工具,它是一种工作方式,基于git的工作流,你可以高效的进行开发工作,通过git的各种命令的组合使用,基本上可以解决你所遇到的所有问题,你可以告别copy n份代码,管理n个目录,告别beyond compare。

目录
相关文章
|
8月前
|
安全 网络安全 开发工具
百度搜索:蓝易云【git无法使用git协议clone github仓库问题解决方法】
通过尝试以上解决方法,你应该能够解决无法使用Git协议克隆GitHub仓库的问题。选择适合你网络环境和要求的方法,并根据需要进行相应的配置。
284 2
|
开发工具 git
git clone TimeOut 无法下载 git 设置代理
git clone TimeOut 无法下载 git 设置代理
165 0
|
5月前
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
5月前
|
开发工具 git
Git 中的 fork、branch 和 clone
【8月更文挑战第27天】
272 5
|
5月前
|
开发工具 git
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
|
5月前
|
开发工具 git Windows
解决git clone提示You hasn‘t joined this enterprise
解决git clone提示You hasn‘t joined this enterprise
506 2
|
5月前
|
开发工具 git iOS开发
服务器配置Huggingface并git clone模型和文件
该博客提供了在服务器上配置Huggingface、安装必要的工具(如git-lfs和huggingface_hub库)、登录Huggingface以及使用git clone命令克隆模型和文件的详细步骤。
474 1
|
5月前
|
开发工具 git
【Mac 系统】解决git clone速度慢
本文提供了解决Mac系统上使用git clone时速度慢的问题的方法。
185 0
|
7月前
|
开发工具 git
蓝易云 - 解决git clone时出现Failed to connect to 127.0.0.1 port 1573问题
希望这些信息能帮助你解决问题。如果问题仍然存在,可能需要检查你的网络设置或者联系你的网络管理员。
97 3
|
6月前
|
开发工具 git
git clone如何拉取代码,抓取和拉取
git clone如何拉取代码,抓取和拉取