一篇文章带你了解热门版本控制系统——Git
一篇文章带你了解热门版本控制系统——Git
这篇文章会介绍到关于版本控制的相关知识以及版本控制神器Git
我们可能在生活中经常会使用GitHub网页去查询一些开源的资源或者项目,GitHub就是基于Git而产生的平台
接下来让我们来细细道来~
Git是一门非常简单的技术,但在实际开发中占有很重要的地位,请务必了解掌握
版本控制
在介绍Git之前我们先来介绍一个名词:版本控制
版本控制概念
我们在标题已经提到了Git的最大作用:版本控制
那么我们先来了解一下版本控制:
- 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
通俗来说的话:
- 版本控制用于在开发的过程中管理我们的文件
- 我们可以查看文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本。
例如我们所使用的产品有Version,版本常分为1.0,2.0...版本区分
但是我们所淘汰掉的版本是不会被直接抛弃删除,而是被像Git这样的软件所保存传送到相关仓库中
又或者我们的软件开发之后,会由许多人进行开发修改
但是并非所有人的开发版本都会被保留使用,那些被淘汰的版本就会被像Git这样的软件所保存传送到相关仓库中
版本控制的优势:
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
总而言之版本控制在我们的实际开发中占有很重要的地位!
多人开发就必须要使用版本控制,否则无法控制项目的开发状态
版本控制工具
我们目前常用的控制工具大致分为五种:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
其中SVN属于版本控制的老大哥,但目前大部分公司已经不再使用
我们目前学的Git就属于版本控制的主流工具,基本上大部分公司都在使用Git工具
版本控制分类
我们通常将版本控制分为三类:
- 本地版本控制
- 概念:
本地版本控制通常用于个人开发,我们将我们自己的项目进行版本控制,在迭代后将原版本的项目原件保留下来
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,如RCS。
- 优缺点:
只能用于个人开发,多人开发在多台计算机上,本地版本控制无法满足
- **集中版本控制 **
- 概念:
集中版本控制通常用于团队开发,将一个电脑作为主机,将所有需要保存的项目资料都存放在该电脑上,实现集中控制
协同开发者从服务器上同步更新或上传自己的修改,如SVN
- 优缺点:
集中版本控制将所有资料保存在一台电脑上,相当于单机存储,保密性较高;但一旦计算机出现损坏,项目备份丢失,无法找回
- 分布式版本控制
- 概念:
分布式版本控制通常用于团队开发,所有人都保存有项目的所有资料,实现分布式控制
- 优缺点:
保密性差,所有人都携带项目源码,具有一定安全隐患;但同时所有人都保存有源码,一台电脑损坏并不影响项目的保存
Git和SVN的主要区别
我们在前面提及到了集中版本控制和分布式版本控制,实际上它们就分别对应着SVN和Git的控制方式
因而我们给出相关总结:
- 数据存放地址:SVN存放在一台计算机;Git存放在所有计算机
- 项目开发方式:SVN需要联网获得主机上的项目,然后开发完后推送回原电脑;Git直接开发并比对研究即可
- 优缺点:SVN安全性低但容易丢失;Git不易丢失但安全性差
Git环境配置
首先我们来讲解Git的安装以及环境配置等信息
Linux常用指令
在正式开始Git教学之前,我们来复习一些Linux相关指令:
# 表示注释
cd : 改变目录。
cd . . : 回退到上一个目录,直接cd进入默认目录
pwd : 显示当前所在的目录路径。
ls(ll) : 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
rm: 删除一个文件, rm index.js 就会把index.js文件删除。
mkdir : 新建一个目录,就是新建一个文件夹。
rm -r : 删除一个文件夹, rm -r src 删除src目录
mv : 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,
reset : 重新初始化终端/清屏。
clear : 清屏。
history : 查看命令历史。
help : 帮助。
exit : 退出。
Git下载与打开
- 官网下载安装(官网地址:https://git-scm.com/)
安装基本只需要修改安装路径和默认打开方式,其他选项一律默认即可
- 启动Git
我们启动一般有三种方法:
- Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
- Git CMD:Windows风格的命令行
- Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
我们通常选用Git Bash,采用Linux命令行来进行
下载Git之后,我们可以在文件夹下直接点击右键,可以看到出现有Git Bash的选项,点击即可开启
Git相关配置
我们在下面介绍一些Git的配置查看方法以及配置方法
首先我们需要知道查看Git配置的方法:
# 查看全部配置
git config -l
Git中存在有系统默认配置以及我们自己配置的信息:
# 查看系统config
git config --system --list
# 查看当前用户(global)配置
git config --global --list
我们在Git中有必须设置的两个属性:
# 这是非常重要的,因为每次Git提交都会使用该信息。
# 设置名称
git config --global user.name "QiuLuo"
# 设置邮箱
git config --global user.email 3206154701@qq.com
如果你希望在单个项目中修改name和email可以去掉--global,表示不在全局中配置
Git基本理论
我们下面将从Git的数据传递方面讲起,是很重要的地方哦~
Git四个区域
我们的Git会将我们的数据保存下来,作为版本保留下来
而保留的地点通常被我们划分为四个区域:
- 工作目录(Working Directory)
- 暂存区(Stage/Index)
- 资源库(Repository或Git Directory)
- 远程仓库(Remote Directory)
这四个区域的转换方式如下图所示:
接下来让我们依次介绍这四个区域:
- 工作目录:第一层,主机存放代码的区域
- 暂存区:第二层,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- 资源库:第三层,本地仓库,安全存放数据的位置,保存有你提交到所有版本的数据。
- 远程仓库:第四层,托管代码的服务器
Git区域工作流程
在我们代码书写完毕后,我们通常会将数据存放到资源库
具体的Git流程如下:
1、在工作目录中添加、修改文件 [Git状态:已修改(modified)]
2、将需要进行版本管理的文件放入暂存区域 [Git状态:已暂存(staged)]
3、将暂存区域的文件提交到git仓库 [Git状态:已提交(committed)]
Git项目搭建
接下来我们开始Git项目搭建的讲解~
本地仓库搭建
我们前面说到,我们Git会将工作目录的项目传递到本地仓库上
那么首先我们需要学会创建本地仓库:
- 本地仓库创建
# 在当前目录新建一个Git代码库(注意:会在当前页面下产生一个隐藏目录.git,需要打开隐藏目录标签才可以查看到)
$ git init
- 远程仓库克隆
# 克隆一个项目和它的整个代码历史(版本信息) 提供一个url:https://gitee.com/kuangstudy/openclass.git
$ git clone [url]
Git常用六个方法
Git项目文件的处理一共只有六个方法,用于控制四个区域的流动:
- add:工作目录 -> 暂存区
- commit: 暂存区 -> 资源库
- push: 资源库 -> 远程仓库
- clone: 远程仓库 -> 资源库
- checkout: 资源库 -> 工作目录
- pull: 远程仓库 -> 工作目录
Git文件操作
我们Git的项目操作实际上来说就是对文件进行操作
下面我们来介绍Git操作文件的一些方法以及文件的四种常见状态
Git文件状态
我们对文件进行不同的操作或采用了不同的代码之后,文件的状态会发生变化
我们通常将文件的状态分为四种:
- Untracked : 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify : 未修改, 即版本库中的文件快照内容与文件夹中完全一致.
- Modified : 文件已修改, 仅仅是修改, 并没有进行其他的操作.
- Staged : 暂存状态.
文件之间的状态转换如下:
- Untracked通过git add状态变为Staged.
- Unmodify如果被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态
- Staged执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
Git文件指令
Git提供了两个方法可以查看单个文件以及所有文件的状态:
# 查看指定文件状态
git status [filename]
# 查看所有文件状态
git status
同时Git也提供了两个方法进行文件类型的转换:
# 添加所有文件到暂存区
git add .
# 提交暂存区中的内容到本地仓库 -m 提交信息
git commit -m "消息内容"
Git文件忽略
在我们的实际开发中,有些文件并不需要添加到本地仓库中,因而Git为我们提供了一个配置类:
- .gitignore配置类
该文件存在以下规则:
-
忽略文件中的空行或以井号(#)开始的行将会被忽略。
-
可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符
-
如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
-
如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
-
如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
我们给出相关示例:
#为注释
#忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
*.txt
#但lib.txt除外
!lib.txt
#仅忽略项目根目录下的TODO文件,不包括其它目录temp
/temp
#忽略build/目录下的所有文件
build/
#会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
Gitee码云
我们在实际开发中通常需要一个远程仓库来存放我们的项目版本
目前可靠的Git开发平台有GitHub,Gitab,Gitee,我们在这里采用Gitee为例
- 注册登录码云页面
- 获得SSH公钥
# 首先我们采用Git获得SSH公钥
# 生成SSH公钥 然后进入 C:\Users\Administrator\.ssh 目录 可以查看相关信息
ssh-keygen
- 设置本机绑定SSH公钥,实现远程仓库免密码登录
- 创建一个远程仓库
- 克隆至本地即可
$ git clone 远程仓库HTTPS
Git标签操作
在介绍完码云后,我们就已经有了一个远程仓库
远程仓库中不仅仅可以存放分支,还可以存放标签,而且标签的作用更为显著
标签就是指某个分支的某个特定时间点的状态,就是历史版本,我们可以通过分支很方便的保存切换当前标记的状态
我们在这里给出Git标签的操作指令:
# 列出已有标签
git tag
# 创建标签
git tag [name]
# 将标签推送到仓库中(shortName为仓库名origin;name为标签名v0.1)
git push [shortName] [name]
# 检出标签(branch为本地标签名名称无所谓;name为所需的远程仓库中的标签名)
git checkout -b [branch] [name]
IDEA集成Git
这一小节我们来介绍如何在IDEA中使用Git保存数据
- 创建Git包
我们在项目中采用VCS创建一个Git包(放在当前目录下即可):
- 提交未同步数据
点击左侧的commit,点击全部提交即可(注意:记得设置.gitignore来标记不需要同步的文件)
- 同步Gitee码云的远程仓库并提交即可
点击右上交的push按钮,将远程仓库链接拷贝并添加,点击push提交即可
- 返回Gitee页面查看数据即可(注意:需要设置为公开才可更新成功)
Git分支
分支就是脱离于主线之外的内容
版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线,让我们在不影响主线的同时继续工作
如果同一个文件在合并分支时都被修改了则会引起冲突:
- 解决的办法是我们可以修改冲突文件后重新提交
- 但是我们需要选择要保存某一人的代码而舍弃另一个人的代码
那么我们的日常开发应该是以哪种方式开发呢:
- master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作
- 工作一般情况下在新建的dev开发分支上工作,在分支稳定后可以合并到主分支master上来。
我们在这里给出Git分支的常用指令:
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
我们的IDEA的分支修改在IDEA工具的右下角处,可以选择新建,也可以选择更换分支更新:
结束语
好的,关于Git的内容就介绍到这里,希望能为你带来帮助!
附录
该文章属于学习内容,具体参考B站遇见狂神说的秦江老师的Git课程
这里附上视频链接:1、前言之版本控制_哔哩哔哩_bilibili
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=27a6qjvve64g8