网上关于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。

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

  1. AWS计算云上下载代码命令 git clone url

    AWS计算云上下载代码命令 git clone url https://blog.csdn.net/qq_42672770/article/details/81317778

  2. git clone一个github上的仓库非常缓慢 和 github网页打不开

    git clone一个github上的仓库非常缓慢,简单快捷的方法解决git下载缓慢问题 文章目录: 1 问题描述 2 解决git clone下载速度缓慢问题 2.1 使用github的镜像网站 (亲 ...

  3. windows上git clone命令速度过慢问题的解决

    windows上git clone命令速度过慢问题的解决 参考文章: (1)windows上git clone命令速度过慢问题的解决 (2)https://www.cnblogs.com/Laggag ...

  4. 用git clone命令从gitlab上拉取公司项目操作步骤

    Begin 有两种方式Clone: Clone with SSH Clone with HTTPS 听说第二种方法比较复杂,这里介绍第一种配置SSH公私钥方法 配置公私钥方法 第一步:在gitlab上 ...

  5. github上git clone和git push速度太慢的解决办法

    修改hosts 先到https://www.ipaddress.com/上查询github.com和github.global.ssl.fastly.net最快的ip,然后在etc/hosts文件下新 ...

  6. github或者gitee上使用git clone项目到本地的方法(解决下载速度过慢或者无法下载的问题)

    方式一(直接在github上克隆): Github国内镜像网站有github.com.cnpmjs.org和git.sdut.me/.在clone某个项目的时候将github.com替换为github ...

  7. linux上git克隆命令,Git clone命令用法

    git clone是git中常用的命令,其作用是将存储库克隆到新目录中.那么在git中,git clone具体该如何用呢? 更快更轻松的学习Git,请点击Git微课 git clone命令的作用是将存 ...

  8. mac上git clone报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (e

    一,加大缓存区 git config --global http.postBuffer 524288000 这个大约是500M 二.少clone一些,–depth 1 git clone https: ...

  9. Git详解之四:服务器上的Git

    原文:<Pro Git> 服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里 ...

最新文章

  1. 华为9.0系统机器一键激活xposed框架的流程
  2. C# ListView添加DragDrop
  3. 自定义ViewGroup实现仿微信图片选择器
  4. jzoj2679-跨时代【背包,dfs,状压】
  5. Hadoop入门(十七)Mapreduce的多表关联程序
  6. 一步步学习javascript基础篇(8):细说事件
  7. 树莓派vnc用法 linux,怎样使用VNC在树莓派上运行远程桌面
  8. 软件工程学习总结(4)——软件工程概论
  9. WTL -- 常用功能
  10. python编程语言_Python编程语言的历史
  11. 在.NET/Mono上运行Java:Jeroens Frijters谈IKVM.NET
  12. JQuery 使用笔记 2013.09.05
  13. python实现进程调度算法
  14. 五笔86版字根图程序
  15. 网站搭建:从零搭建个人网站教程(1)
  16. Python collections模块之Counter()详解
  17. 如何给Excel减肥(相关技巧和注意事项)
  18. 机器学习实战—逻辑回归—信用卡欺诈检测
  19. facenet无法检测到的三张人脸照片
  20. 实施化工厂人员定位的原因详解--新导智能

热门文章

  1. python sqlserver 数据操作_python对Excel数据进行读写操作
  2. STL源码剖析 迭代器iterator的概念 和 traits编程技法
  3. const int *a和int*const a 的区别详解
  4. Android Studio设置
  5. Java提高篇 —— Java三大特性之继承
  6. Android设计模式之——工厂方法模式
  7. 自信不疑的人不会做的15件事
  8. 补肾分男女,养肾如养命
  9. H.264的NALU,RTP封包说明(转自牛人)
  10. H.264中POC类型之探讨