【Git版本控制】

Day10_Git版本控制

知识点01:课程内容大纲与学习目标
#课程内容大纲
    版本控制工具Git
​
#学习目标
    了解下git的背景以及作用
    了解下git基本使用

知识点02:项目开发中的版本问题

目标:了解项目开发中遇到的开发版本问题

  • 举例:你在大学中写论文

    • 问题1:==直接在一个文件上不断修改,但如果我想回到之前某个版本怎么办==?

    • 手动的管理和记录每个版本之间的变化

    image-20210517171312532

    • 问题2:如果我让别人帮我写,我自己也写,我==想将别人写的部分和我写的部分合并怎么办==?

      • 论文有10个部分,10个人来写,我需要合并

      • 我觉得有个人写的不好,我要重写它的,再合并

    • 问题:所有的操作都在手动管理,极其容易出现错误

  • 项目开发会存在同样的问题

    • 整个项目由多个人共同开发,每个人开发的模块可能一样也可能不一样

      • 不一样:每个人负责不同的 功能模块

      • 一样:多个人共同负责一个模块

    • 代码会产生多个版本

      • 版本如何控制?

      • 这个版本中没有这个功能,但是我下个版本想要这个功能,下下一个版本这个功能又不需要了

      • 产品

        • v1:A、B

          • 原来的版本,有A和B两个功能

        • v2:A、C

          • 去掉了B功能,添加了C功能

        • v3:A、B、C

          • 添加了B这个功能

  • ==如何实现多个人共同开发一个项目,能将项目的多个版本进行自由方便的管理==

    • 甲:今天开发了一个版本,保存这个版本

    • 乙:基于甲昨天开发的版本,进行继续开发

    • 丙:负责开发另外一个版本


知识点03:Git的诞生及特点

了解Git的诞生背景及特点

  • 项目版本管理工具:能==自动的将多个版本进行管理存储==,类似于快照,多个人共享版本

  • Git诞生==分布式项目管理工具==目前整个行业内最流行最受欢迎的项目版本管理工具

    • 开发者:Linus Torvalds

      • Linux的创始人

      • Linux诞生以后,全球很多开发者开发了 很多个版本的Linux,提交给Linus Torvalds

      • Linus Torvalds 将优秀的代码集成在Linux内核中,手动管理所有的代码

      • Linus Torvalds 不喜欢传统的免费CVS等工具,因为这些工具不好用,好用的都收费

      • Linus Torvalds 先选择了一个商业化的工具BitKeeper ,达成协议可以免费使用

      • 于是团队中的一个哥们有个想法:能不能破解这个东西?

      • 被发现了:Linus Torvalds 保证不再破解

      • 到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结

        束,他们收回了免费使用 BitKeeper 的权力

      • 两周以后,Linus Torvalds 自己用C语言开发了Git,使用了类似于Linux的管理方式

      • Linus Torvalds :将Linux的版本控制切换到Git上

        • Git的开发汲取了其他的版本控制工具的优点,避免了缺点

==SVN和GIT对比==

集中式:SVN

【Git版本控制】_第1张图片

  • 所有版本的代码都集中在SVN的服务器上

  • 任何一个开发者,都只能连接SVN服务器,下载代码和上传新的版本

  • 集中式:所有的开发都围绕SVN服务器为核心

  • 缺点

    • 必须联网

      • 局域网:还是比较快的,但是回家以后就没办法开发了

        • 在公司下载好

        • 回家开发,只能开发一个版本

        • 回到公司上传这个版本

      • 互联网:特别慢

        • 在任何一个地方连接SVN服务器,进行下载和上传

    • 自己无法自动管理多个版本

    • SVN服务器存在单点故障

  • ==分布式:Git==

    【Git版本控制】_第2张图片
    • ==去中心化模式==

    • 优点

      • 不需要联网,自己的笔记本就是个本地版本库,直接利用自己的笔记本实现版本的管理

      • 自己可以管理任意多个版本

      • 不需要担心公共的版本库故障,每个人的本地都有版本库

Git的特点
  • 适合于分布式开发,多人可以共同开发,强调个体

  • 公共的版本库服务器的压力不会太大

  • 速度快、更加灵活

  • 任意的开发者之间如果产生冲突也容易解决

  • 不需要联网也可以实现多版本管理


知识点04:Git管理的组成结构

掌握Git管理版本的组成结构

  • 图示

    【Git版本控制】_第3张图片
    • 本地版本控制Git服务器

      • ==工作区【Work Dir】==:就是你开发和修改代码的地方

      • ==暂存区【Index】==:临时存放你即将提交的版本的地方

        • 所有需要保存的版本必须先添加到暂存区

      • ==本地版本仓库【HEAD】==:本地的版本库,实现本地的版本的管理

        • 所有暂存区的版本会被提交到本地版本库

    • ==远程版本仓库==:用于共享项目代码版本

      • GitHub: GitHub: Let’s build from here · GitHub

      • Gitee: Gitee - 基于 Git 的代码托管和研发协作平台


知识点05:Git及辅助工具安装

实现Git及辅助工具的安装

  • 实施

    • 需要安装的工具

      • Git-2.13.0-64-bit.exe:==Windows版本的Git工具安装包==

      • TortoiseGit-2.4.0.2-64bit.msi:==Git的可视化工具安装包==

      • TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi:TortoiseGit工具的汉化包

    • 安装Git

      • 参考安装文档

    • 安装TortoiseGit

      • 参考安装文档

    • 安装TortoiseGit汉化包

      • 参考安装文档

知识点06:本地仓库构建几种方式

基于自己的笔记本,在本地操作系统中实现Git本地仓库的构建

step1:准备

  • 每个项目都可以基于Git构建版本库,每个项目都可以做版本管理

  • 先创建一个目录,再创建三个子目录【三个本地库】

    【Git版本控制】_第4张图片

  • 本地库只要构建成功就会创建一个 隐藏目录.git

    修改配置 打开显示隐藏的项目

step2:构建

方式一:通过Git命令来构建

【Git版本控制】_第5张图片

【Git版本控制】_第6张图片

git init

【Git版本控制】_第7张图片

方式二:通过TortoiseGit构建

【Git版本控制】_第8张图片

【Git版本控制】_第9张图片

【Git版本控制】_第10张图片

【Git版本控制】_第11张图片

方式三:通过Git图形化界面构建

【Git版本控制】_第12张图片

【Git版本控制】_第13张图片

【Git版本控制】_第14张图片

【Git版本控制】_第15张图片

【Git版本控制】_第16张图片

【Git版本控制】_第17张图片

【Git版本控制】_第18张图片

知识点07:Git基本操作--添加、提交

实现在Git本地工作区,添加文件到本地仓库

创建文件

【Git版本控制】_第19张图片

添加到暂存区
#添加一个或者多个文件到暂存区
git add [file1] [file2] ...
​
#添加指定目录到暂存区,包括子目录
git add [dir]
​
#添加当前目录下的所有文件到暂存区
git add .
​
#如何嫌命令难记,也可以使用下述的tortoiseGit工具操作

【Git版本控制】_第20张图片

【Git版本控制】_第21张图片

注意啊,这里==点确定表示添加到暂存区==,点击提交就一步提交到仓库了。

提交到本地库
#前面我们使用 git add 命令将内容写入暂存区。
​
#git commit 命令将暂存区内容添加到本地仓库中。
​
#master涉及分支的管理,我们后面细说。
​
git commit -m [message]
​
提交的时候最好写上提交日志  便于后续浏览排查。

【Git版本控制】_第22张图片

【Git版本控制】_第23张图片

【Git版本控制】_第24张图片

查看日志

【Git版本控制】_第25张图片

查看本地版本库

【Git版本控制】_第26张图片

【Git版本控制】_第27张图片


知识点08:Git基本操作--修改、还原

实现基于本地版本库的修改提交

1修改文件

【Git版本控制】_第28张图片

【Git版本控制】_第29张图片

2提交第二个版本

【Git版本控制】_第30张图片

【Git版本控制】_第31张图片

3修改并提交第三个版本

4查看版本日志

【Git版本控制】_第32张图片

【Git版本控制】_第33张图片

5还原:修改文件,但未提交

使用tortoiseGit工具,可以将工作区的内容==还原至最后一个提交的版本==。

【Git版本控制】_第34张图片

【Git版本控制】_第35张图片

【Git版本控制】_第36张图片

【Git版本控制】_第37张图片

【Git版本控制】_第38张图片

【Git版本控制】_第39张图片


知识点09:Git基本操作--版本差异比较、回退
1修改文件

【Git版本控制】_第40张图片

2工作区与最新版本的差异

【Git版本控制】_第41张图片

【Git版本控制】_第42张图片

3工作区与倒数第二个版本的差异

【Git版本控制】_第43张图片

【Git版本控制】_第44张图片

4工作区与之前任意版本的差异比较

可以使用tortoiseGit工具选中文件、右键查看日志信息。

在日志信息中选中想要比较的版本和工作区的之间的差异。

【Git版本控制】_第45张图片

5版本回退

有时候用Git的时候,有可能commit提交代码后,发现这一次commit的内容是有错误的,那么有两种处理方法: ​ 1、修改错误内容,再次重新commit一次

2、使用git reset 命令撤销这一次错误的commit

第一种方法比较直接,但会多次一次commit记录。 ​ 第二种方法会显得干净清爽,因为错误的commit没必要保留下来。但是使用的时候等慎重,对于新手而言。

git reset 命令用于回退版本,可以指定退回某一次提交的版本,有3种模式可供选择,详见画图。

【Git版本控制】_第46张图片

【Git版本控制】_第47张图片

【Git版本控制】_第48张图片

【Git版本控制】_第49张图片

【Git版本控制】_第50张图片

【Git版本控制】_第51张图片

  • 小结

    • ==注意==:如果重置回到某个版本时,关闭了tortoiseGit日志窗口,这个版本之后的版本全部会被删除,无法再次回到之后的版本

    • 重置git reset,只能倒退回退,如果有前进的需求怎么办?

      导出需要重置到的版本,重新提交版本,将原来的一个老版本变成最新版本


知识点10:Git基本操作--删除
情况1:文件删除

直接将工作区的已经提交的文件删除之后,不做提交动作,可以使用还原操作。

【Git版本控制】_第52张图片

【Git版本控制】_第53张图片

情况2:删除版本

将工作区的已经提交的文件删除之后,做提交动作,可以通过日志还原。

【Git版本控制】_第54张图片

【Git版本控制】_第55张图片

【Git版本控制】_第56张图片

【Git版本控制】_第57张图片

情况3:删除管理

也就是所谓的摆脱Git的控制

【Git版本控制】_第58张图片

【Git版本控制】_第59张图片

【Git版本控制】_第60张图片

【Git版本控制】_第61张图片


知识点11:添加/提交整个项目
1复制工程到本地库

【Git版本控制】_第62张图片

2添加到暂存区

【Git版本控制】_第63张图片

【Git版本控制】_第64张图片

3忽略不需要做控制的目录

【Git版本控制】_第65张图片

【Git版本控制】_第66张图片

【Git版本控制】_第67张图片

【Git版本控制】_第68张图片

4提交到本地库

【Git版本控制】_第69张图片

【Git版本控制】_第70张图片


知识点12:暂存区的设计
  • 没有暂存区

    • 在提交的时候,会让你选择那些文件需要提交

    • 我们所提交的必然是一个完整的版本

    • 毛病1

      • 文件特别多,挨个选非常麻烦

    • 毛病2

      • 版本1:ABC

      • 版本2:ABD

      • 想要一个版本:ACD

  • 设计暂存区

    • 设计Git的时候考虑到上面两个问题的主要原因是提交版本修改的颗粒度太大了

    • 将可能需要提交的版本放入暂存区

    • 每一次只放一个部分

      • 第一次:A

      • 第二次:B

      • 提交一次:AB

      • 第三次:A,B,C

      • 提交一次:ABC版本

      • 第四次:A,C,D

      • 提交一次:ACD版本

    • 理解:

      • ==暂存区:相当于你买东西的先添加购物车==

        • 将商品放入购物车的自由组合进行支付

      • 版本:就是一次支付


知识点13:Git远程仓库

了解Git远程仓库的设计

  • 问题

    • 如何实现多台机器之间共同协作开发版本的管理?

  • 解决

    • 公共代码版本托管平台

  • 商业代码托管平台

    • 国外:==GitHub==

    • 国内:==Gitee==

    • 可以将代码发布到这个平台上进行托管,其他的人可以从这个平台下载代码

      • 公共代码库:大家都可以看到的

      • 私有代码库:可以控制访问权限,但是收费

知识点14: GitHub远程仓库
1.GitHub注册登录以及创建仓库
  • 注册GitHub,并登陆

    • 参考附录一:GitHub: Let’s build from here · GitHub

    • 如果访问不了,添加DNS解析

      # GitHub
      140.82.114.4 github.com
      199.232.69.194 github.global.ssl.fastly.net
  • 创建公共仓库

    【Git版本控制】_第71张图片【Git版本控制】_第72张图片【Git版本控制】_第73张图片

2.本地与GitHub的SSH连接

实现本地仓库与GitHub公共仓库的连接

  • 需求

  • 即使是public的公共仓库,也只是所有人可读,但不是所有人可写

    • 哪些人可写呢?

    • 需要配置SSH认证

      • 需要将本地机器的公钥填写在GitHub中,只有填写公钥的机器才能推送

  • 本地秘钥生成

  • step1:在自己Windows本地生成一对公私钥

    ssh-keygen -t rsa
    【Git版本控制】_第74张图片

  • step2:找到自己的公钥的位置:当前用户的家目录下:C:\user\用户名 \ .ssh

    【Git版本控制】_第75张图片

  • step3:打开公钥的文件,并复制公钥的内容

    【Git版本控制】_第76张图片

  • 配置GitHub

【Git版本控制】_第77张图片

【Git版本控制】_第78张图片

【Git版本控制】_第79张图片

  • 将整个公钥的所有内容配置到SSH的key中,添加保存即可


3.同步到远程仓库

实现本地仓库代码同步到远程仓库

方式一:命令同步
#添加一个远程仓库的地址叫origin
git remote add origin [email protected]:binzi/repository1.git
​
练习中替换成自己的仓库地址
​
#将本地master同步到远程的origin
git push -u origin master

github查看:

【Git版本控制】_第80张图片

方式二:工具同步:SSH

【Git版本控制】_第81张图片

【Git版本控制】_第82张图片

【Git版本控制】_第83张图片

【Git版本控制】_第84张图片

【Git版本控制】_第85张图片

【Git版本控制】_第86张图片

【Git版本控制】_第87张图片

【Git版本控制】_第88张图片

【Git版本控制】_第89张图片

【Git版本控制】_第90张图片

【Git版本控制】_第91张图片

【Git版本控制】_第92张图片

方式三:工具同步:HTTPS

【Git版本控制】_第93张图片

【Git版本控制】_第94张图片

【Git版本控制】_第95张图片

【Git版本控制】_第96张图片

【Git版本控制】_第97张图片

【Git版本控制】_第98张图片

【Git版本控制】_第99张图片

【Git版本控制】_第100张图片

  • 小结

    • 实现本地仓库代码同步到远程仓库


4.从远程仓库克隆

实现从远程仓库克隆到本地仓库

方式一:命令克隆
git clone [email protected]:binzi/reps1.git   

# 注意: 后续把链接改成自己的github路径
# 示例: git clone [email protected]:AllenWoon/xls_2.git

【Git版本控制】_第101张图片

【Git版本控制】_第102张图片

方式二:工具克隆

【Git版本控制】_第103张图片

【Git版本控制】_第104张图片

  • 小结

    • 实现从远程仓库克隆到本地仓库


知识点14: Gitee远程仓库
1.Gitee注册登录以及创建仓库
  • 网址: GitHub: Let’s build from here · GitHub

  • 注册:

【Git版本控制】_第105张图片

  • 登录

【Git版本控制】_第106张图片

  • 创建仓库

【Git版本控制】_第107张图片

2.本地与Gitee的SSH连接
本地秘钥生成
  • step1:在自己Windows本地生成一对公私钥

    ssh-keygen -t rsa
  • step2:找到自己的公钥的位置:当前用户的家目录下:C:\user\用户名 \ .ssh

    【Git版本控制】_第108张图片
  • step3:打开公钥的文件,并复制公钥的内容

配置Gitee公钥

将整个公钥的所有内容配置到SSH的公钥key中,添加保存即可

【Git版本控制】_第109张图片

【Git版本控制】_第110张图片

【Git版本控制】_第111张图片

【Git版本控制】_第112张图片

3.同步到远程仓库
ssh方式

【Git版本控制】_第113张图片

【Git版本控制】_第114张图片

【Git版本控制】_第115张图片

【Git版本控制】_第116张图片

【Git版本控制】_第117张图片

【Git版本控制】_第118张图片

【Git版本控制】_第119张图片

注意: 如果要推送失败一般是访问权限问题,或者远程仓库地址错误,再或者就是没有外网

https方式

【Git版本控制】_第120张图片

【Git版本控制】_第121张图片

【Git版本控制】_第122张图片

【Git版本控制】_第123张图片

4.从远程仓库克隆
ssh方式

【Git版本控制】_第124张图片

【Git版本控制】_第125张图片

【Git版本控制】_第126张图片

【Git版本控制】_第127张图片

https方式

【Git版本控制】_第128张图片

【Git版本控制】_第129张图片

【Git版本控制】_第130张图片

知识点15: 冲突问题

了解版本管理的冲突问题及解决方案

问题

【Git版本控制】_第131张图片

  • step1:用户1本地是版本3,Github也是版本3

  • step2:用户2克隆了Github中版本3,用户2的本地是版本3

  • step3:用户1本地是版本4,GitHub也是版本4

  • step4:用户2基于版本3开发了用户2的版本4推动给GitHub

  • 产生了冲突,如何解决?

举例
  • 本地reps3

    添加一个文件demo01.txt,先提交到本地仓库;

    然后同步到远程仓库中

  this is a good file
  • 本地reps4:克隆刚才的远程仓库

    本地修改文件,提交到本地仓库,同步到远程仓库

    this is a bad file
  • 本地reps3:demo01.txt,进行了修改

    this is a file
    • 同步到远程仓库

    • 提交失败

  • 解决

    • 本地reps3:拉取远程仓库中的版本,发现冲突的文件

    • 修改冲突的文件

    • 解决冲突

    • 提交本地仓库

    • 提交远程仓库

解决
  • 如果别人已经提交了某个版本,自己再次提交这个版本,会失败

  • 将两个冲突的版本合并,由开发者自行选择到底应该 使用哪个版本

    • step1:先拉取远程仓库中的当前的这个版本

  • step2:与自己的版本做比较

    • step3:调整好确认的版本以后,再次提交

【Git版本控制】_第132张图片

【Git版本控制】_第133张图片

【Git版本控制】_第134张图片

【Git版本控制】_第135张图片

【Git版本控制】_第136张图片

【Git版本控制】_第137张图片

【Git版本控制】_第138张图片

【Git版本控制】_第139张图片

【Git版本控制】_第140张图片

【Git版本控制】_第141张图片

知识点16: 分支的功能与分支管理
  • 业务场景

    • 开发一个APP

      • 普通的开发线

        • A、B、C

        • v1/v2/v3

      • VIP的开发线

        • A、B、C、D

        • v1/v2/v3

      • 测试开发线

        • A、B、C、D、E

        • v1/v2/v3

    • 问题:如果一个项目中多条开发线都需要做版本控制怎么办?

    • 解决:分支管理

  • 分支管理

    • 一个项目中可以有多个分支,每个分支独立管理各自的版本,默认只有一个分支:master

    • 创建分支

      【Git版本控制】_第142张图片【Git版本控制】_第143张图片

    • 切换分支

      【Git版本控制】_第144张图片【Git版本控制】_第145张图片【Git版本控制】_第146张图片
      • 注意:测试vip分支与master 分支

        • 在vip分支中修改的这个版本,在master中是否能看到对应的修改?

          • 看不到

          • ==所有的分支是独立的==

        • 在Master管理的文件或者版本,在vip中是否能看到?

          • 看不到

    • 删除分支

      • ==当前正在使用分支不允许删除==

      • 删除其他的分支

        【Git版本控制】_第147张图片【Git版本控制】_第148张图片【Git版本控制】_第149张图片【Git版本控制】_第150张图片

  • 小结

    • 实现分支的管理


知识点17: 分支合并

实现分支的合并

  • 需求:将VIP的功能与普通的功能进行合并

    • 普通的APP:master

      • ABCD

    • VIP的APP:vip

      • ABCE

    • 这个功能可以给普通用户使用

      • 希望得到普通用户的APP

      • ABCDE

  • 分支的合并

    • vip内容

      this is version 1
      this is master version 2
      this is vip vserion 3
    • master内容

      this is version 1
      this is master version 2
      this is master version 3
    • 希望得到的结果:master分支合并vip的分支的内容

      • 在Master中做一个新的版本

      • 这个操作是不影响vip分支的

        this is version 1
        this is master version 2
        this is master version 3
        this is vip vserion 3
    • 实现

      【Git版本控制】_第151张图片【Git版本控制】_第152张图片【Git版本控制】_第153张图片【Git版本控制】_第154张图片【Git版本控制】_第155张图片【Git版本控制】_第156张图片【Git版本控制】_第157张图片【Git版本控制】_第158张图片【Git版本控制】_第159张图片


拓展: DataGrip操作Git

【Git版本控制】_第160张图片

【Git版本控制】_第161张图片

【Git版本控制】_第162张图片

【Git版本控制】_第163张图片

【Git版本控制】_第164张图片

【Git版本控制】_第165张图片

【Git版本控制】_第166张图片

【Git版本控制】_第167张图片

拓展: IDEA操作git
1创建一个项目工程

【Git版本控制】_第168张图片

【Git版本控制】_第169张图片

【Git版本控制】_第170张图片

2配置与Git关联

【Git版本控制】_第171张图片

【Git版本控制】_第172张图片

3创建模块代码

【Git版本控制】_第173张图片

【Git版本控制】_第174张图片

【Git版本控制】_第175张图片

【Git版本控制】_第176张图片

4创建本地库设置忽略

【Git版本控制】_第177张图片

【Git版本控制】_第178张图片

【Git版本控制】_第179张图片

【Git版本控制】_第180张图片

【Git版本控制】_第181张图片

【Git版本控制】_第182张图片

【Git版本控制】_第183张图片

5添加并提交代码

【Git版本控制】_第184张图片

【Git版本控制】_第185张图片

【Git版本控制】_第186张图片

【Git版本控制】_第187张图片


知识点21:IDEA中使用Git
  • 目标:实现IDEA中使用Git管理

  • 实施

    • 方式一:右键菜单

      【Git版本控制】_第188张图片

    • 方式二:VCS选项

      【Git版本控制】_第189张图片
    • 提交

      【Git版本控制】_第190张图片【Git版本控制】_第191张图片【Git版本控制】_第192张图片

      【Git版本控制】_第193张图片

  • 小结

    • 实现IDEA中使用Git管理


知识点22:IDEA关联GitHub

实现IDEA与GitHub的集成

  • 创建远程仓库

    【Git版本控制】_第194张图片

  • 配置远程仓库地址

    【Git版本控制】_第195张图片【Git版本控制】_第196张图片【Git版本控制】_第197张图片【Git版本控制】_第198张图片

  • 同步到远程仓库

    【Git版本控制】_第199张图片【Git版本控制】_第200张图片【Git版本控制】_第201张图片

  • 小结

    • 实现IDEA与GitHub的集成


知识点23:IDEA协同开发拉取代码

实现IDEA拉取代码

【Git版本控制】_第202张图片

【Git版本控制】_第203张图片

【Git版本控制】_第204张图片

【Git版本控制】_第205张图片

【Git版本控制】_第206张图片

【Git版本控制】_第207张图片

【Git版本控制】_第208张图片

【Git版本控制】_第209张图片


知识点24:IDEA中分支的使用

实现IDEA中分支的管理

  • 方式一:右键菜单

    【Git版本控制】_第210张图片

  • 方式二:右下角标签

    【Git版本控制】_第211张图片
  • 创建分支

    【Git版本控制】_第212张图片

  • 切换分支

    【Git版本控制】_第213张图片【Git版本控制】_第214张图片
    • 删除分支

      【Git版本控制】_第215张图片
  • 小结

    • 实现IDEA中分支的管理


附录一:创建GitHub账号
  • GitHub: Let’s build from here · GitHub

【Git版本控制】_第216张图片

【Git版本控制】_第217张图片

【Git版本控制】_第218张图片

【Git版本控制】_第219张图片

【Git版本控制】_第220张图片

【Git版本控制】_第221张图片

【Git版本控制】_第222张图片

  • 进入自己邮箱,点击按钮或者链接

【Git版本控制】_第223张图片

【Git版本控制】_第224张图片

你可能感兴趣的:(Python大数据学习笔记,git)