版本控制器(Git)
本章目标
1.版本控制器的概念【理解】
2.Git的安装和配置【掌握】
3.常用Git命令【掌握】
4.分支管理【理解】
5.码云
6.IDEA中配置版本控制器【重点掌握】
具体内容
一.了解版本控制
1.什么是版本控制
团队开发的必然产物
2.为什么需要版本控制
记录文件所有历史变化查看修改情况和责任人错误恢复
共享数据,协作开发
3.VCS(Version Control System)的分类
集中式版本控制系统(VSS,CVS,SVN)
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
分布式版本控制系统(Git)
那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
4.Git是一个开源的分布式版本控制系统
二、Git的工作原理
1.Git中的重要概念
**工作区:**就是你在电脑里能看到的目录
**版本库:**工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库存了很多东西,其中最重要的就是stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master(主分支),以及指向master的一个指针叫HEAD
将文件往Git版本库里添加的时候,是分两步执行的
第一步: 使用git add把文件添加进去,实际上就是把文件修改添加到暂存区
第二步: 是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改
2.Git管理下的文件状态
Untracked:未跟踪状态
Unmodified:未修改状态
Modified:已修改状态
Staged:已暂存状态
Commited:已提交状态
三、Git的安装和配置
windows安装
1.在官网(https://git-scm.com/)上下载
2.window上的具体安装如下步骤所示
一直默认选项即可
3.验证Git是否安装成功
安装成功后可以通过windows右键菜单>Git Bash Here
进入到Git Bash(在windows下建议使用),不建议使用命令提示符窗口
在Git Bash窗口中输入git version查看安装的git的版本,若出现如下所示结果证明已经安装成功
4.Git客户端全局配置
git config --list
git config --global user.name “username” #配置姓名
git config --global user.email “email” #配置email地址
git config --global credential.helper store
ssh-keygen -t rs -C “youremail@qq.com”
如果用了 --global 选项,那么更改的配置 文件就是位于你用户主录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。 如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 – global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
四、常用Git命令
1.创建仓库
Git使用git init命令来初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以git init是使用Git的第一个命令。在执行完git init命令后,Git仓库会生成一个.git目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像SVN会在每个子目录生成.svn目录,Git只在仓库的根目录生成.git目录)
在指定目录使用git init命令,即可实现仓库的创建
2.查看状态
首先新建一个文件README.md,然后查看其状态
解释:如上在gitRep文件夹下通过touch命令新建README.md文件,再通过git status查看git的状态,显示信息如下
On branch master:已经在master分支里边了
No commits yet:表示未提交,目前文件所处工作区,已提交状态已经进入到对象区
Untracked file:表示未被追踪,但是该文件夹下的文件可以被识别,这是由于该文件夹已经被git init过了,所以放在该文件夹下的所有文件都可以被识别,所以你可以看到如上图红色部分将该文件夹下的子文件可以罗列出来。信息提示(use “git add …” to include in what will be committed)表示可以通过git add命令将从工作区转到暂存区中去。
3.将文件保存到暂存区
新建文件acoffee.txt,然后使用命令git add acoffee.txt,将其加入到暂存区内,再通过命令git ls-files可以查看到暂存区中文件的信息
4.将暂存区的文件提交到本地版本库
git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里.
提交的语法:git commit -m "message"
这种是比较常见的用法,-m 参数表示可以直接输入后面的“message”,如果不加 -m参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message
我们再来所一个实验,此时使用不带-m参数来完成一下
输入完信息后,按shift+zz来进行退出
6.查看提交历史
通过git log查看提交的历史
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。每次更新都有一个 SHA-1 校验和作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。
git log 有许多选项可以帮助你搜寻感兴趣的提交,接下来我们介绍些最常用的。
-p: 展开显示每次提交的内容差异
-2: 显示最近的两次更新
–pretty: 指定使用完全不同于默认格式的方式展示提交历史,比如使用oneline将每个提交放在一行显示
format, 可以定制要显示的记录格式,这样的输出便于后期编程提取分析
如下列出了常用的格式占位符写法及其代表的意义
7.克隆远程仓库到本地
首先,要注册一个码云账号
git clone 远程仓库地址 本地仓库目录
例如:git clone https://github.com/zhaijizheGiles/mybatis001.git mybatisdemo
8.将本地仓库内容推送到远程仓库
首先登录Gitee或者Gitee账号,然后创建新的仓库(New Repository)
目前,在Gitee上的这个hellogit仓库还是空的,Gitee告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到Gitee仓库。
现在,我们根据GitHub或者Gitee的提示,在本地的gitRep仓库下运行命令:
首先先要连接到远程仓库中去
git remote add origin https://gitee.com/acoffee/acoffee_hello.git
下来通过git push命令将本地的内容推送到远程仓库里边去了
git push -u origin master
执行如上操作之后,会弹出输入框,输入框需要输入邮箱的地址和密码,输入正确后,方能成功然后再查看Gitee仓库中的内容,会发现两个文件已经提交到了远程仓库中去了
9.拉取远程仓库最新内容到本地仓库
为了演示方便再远程仓库中新建一个文件acoffee.txt
然后在本地GitRep仓库中使用git pull命令进行拉取最新内容
修改远程仓库Gitee中hellogit中的acoffee.txt文件,给其中追加一行信息,如下所示
然后在本地使用命令git pull再次拉取最新内容,观察控制台提示
10、分支管理
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。大多数版本控制器都有分支的功能,这些版本控制器的分支功能效率很低,所以分支功能几乎就成了摆设,使用者很少使用。但是Git在处理分支功能上效率很高,所以说分支管理算是Git很重要的一个功能,下面我们就来具体了解一下分支管理的具体使用。
1).创建与合并分支
我们在创建Git库的时候,Git为我们自动创建了一个主分支,叫master,并且有一个指针叫HEAD,指向master,每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
首先,创建dev分支,并且切换到dev分支
语法: git checkout -b 自定义分支名称
然后使用git branch查看当前所有分支,当前分支前面会标一个 * 号
注意:比须使用git init命令创建仓库,执行git add . 和git commit(提交成功后),再使用git branch命令,才显示出本地分支
删除分支:git branch -d 分支名称
2).解决冲突
合并的语法是:
git merge 分支的名称
这样情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看
果然冲突了,Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后在提交。git status也可以告诉我们冲突文件
我们可以查看readme.txt内容
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
Creating a new branch is quick and simple.
再提交
五.IEDA上操作Gitee
1.在Intellj IDEA上安装Gitee插件
搜索安装然后重启IDEA。
2.登录你的gitee账号
导入项目
可以在这个更改名字
完成导入
这里是码云的一些功能,我们可以邀请其他开发者一起开发
提交代码到本地和远程仓库
我们将写好的代码添加(add) 和提交(commit)
然后我们push
然后我们就完成了上传,即可在码云上看到
pull是宕下代码
3. 解决冲突
现在在码云账户上为该项目添加另外一个开发者,查看仓库管理员,会发现被邀请的用户已经被加入进来,这样两个用户就能对该项目进行协同开发了
但是当我们宕下代码进行编辑,而另一个开发者在我们编辑的过程中重新上传了修改过后的代码进入仓库,这个时候我们再点击push进行上传,就会出现冲突,因为我们本地库的代码与Gitee服务器上的代码不一致造成了冲突。
我们点击方框中的》按钮过后可以进行合并
然后合并后提交,提交成功,然后查看远程Gitee仓库
至此已经完成了所有操作
版本控制器(Git)相关推荐
- 版本控制器-git的安装
1.什么是Git Git是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具 1.2关于版本控制 什么是版本控制?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的 ...
- git (版本控制器)
集中式版本控制器 svn 一般用于公司内部版本控制器(Java) 分布式版本控制器 git 一般用于开源项目,并且可以把开源项目发布到github/gitee中 区别: SV ...
- git 版本控制器 初学习,工作中的问题及其解决方法
one day 1. 下载安装git控制器 >>>>>>(测试环境 window10)Git下载地址https://git-scm.com/downloads ...
- 【原创】Git版本控制器的基本使用
关于git Git,是一个分布式版本控制软件.最初本是为了更好的管理Linux内核开发而被林纳斯·托瓦兹开发,后来因为项目开发中版本控制的强烈需求,而git也日趋成熟,最终成为了一个独立的版本控制软件 ...
- 版本控制器:SVN和Git比较
在日常运维工作中,经常会用到版本控制系统,目前用到最广泛的版本控制器就是SVN和Git,那么这两者之间有什么不同之处呢?今天在此详细记录下: SVN(Subversion)是集中式管理的版本控制器,而 ...
- Git 版本控制器 Gitlab与Github(企业级总结)
文章目录 一.版本控制系统/版本控制器 1.版本控制系统 2.Git与Svn介绍 (1)Git (2)Svn 二.Git 基本操作 1.创建仓库命令 2.提交与修改 3.提交日志 4.远程操作 三.G ...
- Git版本控制器(涵盖GitHub\Gitee码云\GitLab),全网最详细教程
Git(涵盖GitHub\Gitee码云\GitLab) 第1章 Git 概述 Git 是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目. Git 易于学习,占地面积 ...
- Linux——Django 开发环境部署(二)python版本控制器pyenv
python版本控制器pyenv 之前的 那篇是说明了django环境的site package完全独立出来了,但是使用的python解释器还是系统的,为了继续独立出来,甚至是达到ruby的rvm的自 ...
- 集中式版本控制器和分布式版本控制器的个人理解
集中式版本控制器:SVN等 分布式版本控制器:Git等 最近看了一些版本控制器的内容,看完集中式和分布式的区别后,感觉两者其实都需要一个服务器来帮助大家进行代码的融合,在团队开发的情况下,比如使用Gi ...
最新文章
- Python创建daemon
- C# 实现FTP上传与下载
- rm 空间不释放_rm删除文件之后,空间就被释放了吗?
- python考级证书-Python 全国考级二级
- C语言数据类型基本概念
- 【术语扫盲】SKD 半散装件
- Qt / QMainWindow、QDialog、QWidget
- 延时消息_Handler的消息延时是怎么实现的
- 助力春运 重庆机场今晨新增一架飞机入列
- Google发布Puppeteer 1.0
- 十六进制颜色对应示意图
- 51单片机学习——1天学完普中基本实验例程,走马观花式学习,大家切勿效仿。
- Excel - SUM和ABS函数联合使用
- 蓝兔子现在有一个字符串,如果一个字符串从左向右看和从右向左看是一样的,则称为回文串。请编写程序,帮助蓝兔子判断输入的字符串是否是回文串。
- ruby 安装问题的 一二事
- BZOJ3168: [Heoi2013]钙铁锌硒维生素
- MySQL 中的 “My” 是什么意思?
- 最全银行核心系统架构解读(165页PPT)
- Spring/Boot/Cloud系列知识(2)— — 代理模式
- 如何一日千里 突飞猛进?
热门文章
- EA免费开放的智能交易
- python 遍历字典的item ,遍历字典的key 和 value
- CSS-应用方式、选择器、常用属性
- Python操作AutoCAD开发环境概述(Windows)
- 好评如潮的手机APP送给你!
- 万魔和南卡降噪耳机哪个好?佩戴舒适的降噪耳机测评
- 编写一个超市购物程序,在一家超市有牙刷、毛巾、水杯、苹果和香蕉五种商品,商品价格如下表所示。
- 3.5.5 函数式程序的模块性与对象的模块性
- java的entryset_Java中的提供者entrySet()方法
- 什么叫侧面指纹识别_侧面指纹VS屏幕指纹,谁才是更快的识别方式?