Git

Git 分布式版本控制工具

1、概述


1.1、什么是版本控制软件?

版本迭代—>新的版本–>版本管理器

版本控制( Revision control )版件是一个用来记录文件变化,以便将来查阅特定版本修订情况的系统,因此有时也叫做“版本控制系统”实现跨区域多人协同开发

把手工管理文件版本的方式,改为由软件管理文件的版本;这个负责管理文件版本的软件,叫做“版本控制软件“

版本控制软件的优势
  • 协作方便:减轻开发人员的负担,节省时间,同时降低人为错误
  • 不易丢失:在版本控制软件中,被用户误删除的文件,可以轻松的恢复回来
  • 操作简便:只需记住几组简单的终端命令,即可快速上手常见的版本控制软件
  • 易于对比:基于版本控制软件提供的功能,能够方便地比较文件的变化细节,从而查找出导致问题的原因
  • 易于回溯:追踪和记载一个或者多个文件的历史记录,可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态

简而言之就是用于管理多人协同开发项目的技术

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题

多人开发就必须要使用版本控制,否则代价会比较大

1.2、常见的版本控制工具

  • GIT
  • SVN(Subversion)
  • CVS(Concurrent Version System)
1.2.1、版本控制系统分类
  • 本地版本控制系统:单机运行,使维护文件版本的操作工具化
  • 集中化的版本控制系统:联网运行,支持多人协作开发;性能差、用户体验不好
  • 分布式版本控制系统:联网运行,支持多人协作开发;性能优秀、用户体验好
本地版本控制系统

特点:使用软件来记录文件的不同版本,提高了工作效率,降低了手动维护版本的出错率

缺点: ① 单机运行,不支持多人协作开发 ② 版本数据库故障后,所有历史更新记录会丢失

集中化的版本控制系统

特点:基于服务器、客户端的运行模式 ① 服务器保存文件的所有更新记录 ② 客户端只保留最新的文件版本

优点:联网运行,支持多人协作开发

缺点: ① 不支持离线提交版本更新 ② 中心服务器崩溃后,所有人无法正常工作 ③ 版本数据库故障后,所有历史更新记录会丢失

典型应用:SVN

分布式版本控制系统

特点:基于服务器、客户端的运行模式 ① 服务器保存文件的所有更新版本 ② 客户端是服务器的完整备份,并不是只保留文件的最新版本

优点: ① 联网运行,支持多人协作开发 ② 客户端断网后支持离线本地提交版本更新 ③ 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

典型应用:Git

2、初识Git


Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理

创始人:Linux和Git之父林纳斯托瓦兹( Linus Benedict Torvalds) 1969、芬兰赫尔辛基人

2.1、Git基本概念

Git有四个工作区域:工作区(Working Directory)、暂存区(Stage/Index)、版本库(Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

  • Workspace: 工作区,就是你平时存放项目代码的地方
  • Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository: 版本库,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git本地仓库

4、将本地仓库中的文件推送到远程仓库

2.2、Git安装

软件下载:打开git官网,下载对应操作系统的版本

官网

官网下载太慢,推荐使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/

选择对应的电脑版本下载,下一步安装即可

启动Git

安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序

Git Bash:Unix与Linux风格的命令行,使用最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

2.3、Git配置

配置用户信息

安装完 Git 之后,要做的第一件事就是设置自己的用户名和邮件地址。这是非常重要的,因为每次Git提交都会使用该信息,来记录是谁对项目进行了操作。它被永远的嵌入到了你的提交中:

git config --global user.name "Mr zhang"
git config --global user.email "xxxxx@qq.com"

注:如果使用了 --global 选项,那么该命令只需要运行一次,即可永久生效!

通过 git config --global user.name 和 git config --global user.email 配置的用户名和邮箱地址,会被写入到 C:/Users/用户名文件夹/.gitconfig 文件中。这个文件是 Git 的全局配置文件,配置一次即可永久生效

检查配置信息

除了使用记事本查看全局的配置信息之外,还可以运行如下的终端命令,快速的查看Git 的全局配置信息:

# 查看所有的全局配置项
git config --list --global

# 查看指定全局配置项
git config user.name
git config user.email

2.4、Git仓库搭建

获取 Git 仓库的两种方式

  • 将尚未进行版本控制的本地目录转换为 Git 仓库
  • 从其它服务器克隆一个已存在的 Git 仓库

将本地目录转换为 Git 仓库

如果自己有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,需要执行如下两个步骤:

  • 在项目目录中,通过鼠标右键打开“Git Bash”
  • 执行 git init 命令将当前的目录转化为 Git 仓库

注:git init 命令会创建一个名为 .git 的隐藏目录,这个 .git 目录就是当前项目的 Git 仓库,里面包含了初始的必要文件,这些文件是 Git 仓库的必要组成部分

克隆远程仓库

# 克隆一个项目和它的整个代码历史(版本信息)
git clone '远程仓库地址 HTTPS/SSH' https://gitee.com/baomidou/MybatisX.git

gitee或者github上克隆一个测试!

2.5、工作区文件状态

文件状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上,所以了解文件在什么状态就显得尤为重要了

  • Untracked:未跟踪,(未被纳入版本控制)
  • Tracked:已跟踪,(已被纳入版本控制)
    • Unmodify:未修改,工作区中文件的内容和Git 仓库中文件的内容保持一致
    • Modified:已修改,工作区中文件的内容和Git 仓库中文件的内容不一致
    • Staged:暂存状态,工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到Git仓库中

注:这些文件的状态会随着我们执行git的命令从而发生变化

本地仓库操作

常用命令

  • git status:查看文件状态
  • git add:将文件的修改加入暂存区
  • git reset:将暂存区的文件取消暂存或者是切换到指定版本
  • git commit:将暂存区的文件修改提交到版本库
  • git log:查看日志

上面文件的发生的几种状态,通过如下命令可以查看到文件的状态:

# 1.检查文件的状态
# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
# 以精简的方式查看文件状态
git status --short
git status -s

# 2.跟踪新文件
# 添加指定文件到暂存区
git add index.html
# 添加所有文件到暂存区
git add *

# 3.提交更新
# 提交暂存区的内容到本地仓库  -m 提交信息
git commit -m "消息内容"

# 4.撤销对文件的修改	注:危险性比较高,请慎用!
git checkout -- index.html

# 5.取消暂存的文件
git reset '文件名称'

# 6.跳过使用暂存区直接提交到仓库
git commit -a -m '描述消息'

# 7.移除文件
# 从Git仓库和工作区同时移除 index.html 文件
git rm -f index.html
# 只从Git仓库移除 index.html 文件,但保留工作区的 index.html 文件
git rm --cached index.html

# 8.查看提交历史
# 按时间先后顺序列出所有的提交历史,最近的提交排在最上面
git log
# 查看前几条提交历史
git log -2
# 在一行显示查看前几天提交历史
git log -2 --pretty=oneline

# 9.回退到指定版本(会丢失历史版本号记录)
git reset --hard '版本标识'
# 恢复到指定版本(保留历史版本号记录)
git revert '版本标识'

# 查看版本回退操作的历史
git log --reflog --pretty=oneline

在这里插入图片描述

忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式

在主目录下建立".gitignore"文件,此文件有如下规则:

  • # 开头的是注释
  • / 结尾的是目录
  • / 开头防止递归
  • ! 开头表示取反
  • 可以使用 glob 模式进行文件和文件夹的匹配(glob 指的是简化了的正则表达式)

2.6、开源

何为开源?

在这里插入图片描述

开源是指不仅提供程序还提供程序的源代码, 闭源是只提供程序,不提供源代码

什么是开源许可协议?

开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Source License )

常见的 5 种开源许可协议

  • BSD(Berkeley Software Distribution)
  • Apache Licence 2.0
  • GPL(GNU General Public License)
    • 具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
    • 使用 GPL 的最著名的软件项目是:Linux
  • LGPL(GNU Lesser General Public License)
  • MIT(Massachusetts Institute of Technology, MIT)
    • 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
    • 使用 MIT 的软件项目有:jquery、Node.js
为什么要拥抱开源?

开源的核心思想是“我为人人,人人为我”,人们越来越喜欢开源大致是出于以下 3 个原因:

  • 开源给使用者更多的控制权
  • 开源让学习变得容易
  • 开源才有真正的安全

开源是软件开发领域的大趋势,拥抱开源就像站在了巨人的肩膀上,不用自己重复造轮子,让开发越来越容易!

开源项目托管平台

专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下 3 个:

  • Github(全球最牛的开源项目托管平台,没有之一)
  • Gitlab(对代码私有性支持较好,因此企业用户较多)
  • Gitee(又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)

注:以上 3 个开源项目托管平台,只能托管以 Git 管理的项目源代码,因此,它们的名字都以Git 开头

2.7、使用码云

1、注册登录码云,完善个人信息

远程仓库的两种访问方式

Gitee 远程仓库,有两种访问方式,分别是 HTTPS 和 SSH。它们的区别是:

  • HTTPS:零配置;但是每次访问仓库时,需要重复输入 Gitee 的账号和密码才能访问成功
  • SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入 Gitee 的账号和密码

注:在实际开发中,推荐使用 SSH 的方式访问远程仓库

SSH key 的作用:实现本地仓库和 Gitee 之间免登录的加密数据传输

SSH key 的好处:免登录身份认证、数据加密传输

SSH key 由两部分组成,分别是:

  • id_rsa(私钥文件,存放于客户端的电脑中即可)
  • id_rsa.pub(公钥文件,需要配置到 Gitee 中)

2、设置本机绑定SSH公钥,实现免密登录

# 公钥生成在 C:\users\86186\.ssh 目录
# 生成公钥
ssh-keygen -t ed25519

# 中途敲击三次回车

# 查看生成公钥
cat ~/.ssh/id_ed25519.pub

# 首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功
ssh -T git@gitee.com

# 输入 yes 即可

详细配置参考官网教程

3、将公钥信息public key添加到码云账户中即可

4、使用码云创建自己的仓库

新建仓库填写相关信息即可

2.8、操作远程仓库

常用命令

  • git remote:查看远程仓库
  • git remote add:添加远程仓库
  • git clone:从远程仓库克隆
  • git pull:从远程仓库拉取
  • git push:推送到远程仓库
添加远程仓库

先初始化本地库,然后与已创建的远程库进行对接

# 链接远程仓库,创建主分支
git remote add origin 远程仓库地址

远程名称:默认是origin,取决于远端服务器设置

仓库路径:从远端服务器获取此URL

查看远程仓库
git remote
推送到远程仓库
# 推送到远端的同时并且建立起和远端分支的关联关系
git push --set-upstream origin master
# 把本地仓库的变化连接到远程仓库主分支
git push origin master

2.9、Git分支

在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的效率,建议每个开发者都基于分支进行项目功能的开发,使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。同一个仓库可以有多个分支,各个分支相互独立,互不干扰

在初始化本地 Git 仓库的时候,Git 默认已经帮我们创建了一个名字叫做 master 的分支。通常我们把这个master 分支叫做主分支

在实际工作中,master 主分支的作用是:用来保存和记录整个项目已完成的功能代码

因此,是不允许程序员直接在 master 分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃

由于程序员不能直接在 master 分支上进行功能的开发,所以就有了功能分支的概念

功能分支指的是专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到 master 主分支上

常用命令

  • git branch:查看分支
  • git branch [name]:创建分支
  • git checkout [name]:切换分支
  • git checkout -b [name]:创建并切换到该分支
  • git push [shortname] [name]:推送到远程仓库分支
  • git merge [name]:合并分支
  • git branch -d [name]:删除分支
  • git branch -r:查看所有远程分支
  • git branch -a:查看所有本地及远程分支
本地分支操作
# 1.查看分支列表
git branch
# 查看分支详细列表
git branch -v

# 2.新建一个分支
git branch payModule

# 3.切换到指定分支
git checkout payModule

# 4.新建一个分支,并切换到该分支
# -b 表示创建一个新分支
# checkout 表示切换到刚才新建的分支上
git checkout -b login

# 5.合并指定分支到当前分支
# 注:合并前需要先切换到主分支上,再进行合并
git checkout master
git merge payModule

# 6.删除一个分支
# 注:删除分支前需要先切换到不是将要删除的分支上  否则删除失败!
git branch -d '分支名称'

遇到冲突时的分支合并

如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法干净的合并它们。此时,需要打开这些包含冲突的文件然后手动解决冲突

2.10、Git标签

常用命令

  • git tag:列出已有的标签
  • git tag [name]:创建标签
  • git push [shortname] [name]:将标签推送至远程仓库
  • git checkout -b [branch] [name]:检出标签
  • git tag -d [name]:删除标签

Git 标签是 Git 版本库的一个快照,指向某个 commit 的指针。使用 tag 的好处是可以方便地标记某个特定的提交(commit),以便于后续的开发和维护

# 创建两个文件
touch index.js
touch index.html
# 添加到暂存区并提交到本地仓库
git add *
git commit -m '原始方式实现'

# 再次创建一个文件
touch index.vue
# 添加到暂存区并提交到本地仓库
git add *
git commit -m '引入框架实现'

# 创建标签
git tag v1.0
# 查看标签
git tag
# 推动至远端仓库
git push origin v1.0
# 查看指定标签中的内容(需要检出到一个分支中)
git checkout -b orderV1.0 v1.0
# 删除标签
git tag -d '标签名'

# 查看提交版本号和历史记录
git log --oneline
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值