Git:版本控制控制软件
Git:版本控制控制软件
主要内容
- 常用的版本控制
- Git简介
- Git的基本使用
- Git的指令
- 远程仓库操作
- IDEA中操作Git
- 冲突问题解决
学习目标
知识点 | 要求 |
---|---|
常用的版本控制 | 掌握 |
Git简介 | 掌握 |
Git的基本使用 | 掌握 |
Git的指令 | 掌握 |
远程仓库操作 | 掌握 |
IDEA中操作Git | 掌握 |
冲突问题解决 | 掌握 |
一、 前言
1. 为什么要使用版本控制软件
在公司中当多人同时开发一个项目时,最后是如何把自己写的代码和别人写的代码整合到一起的?肯定不是把我写的文件复制给其他人,其他人把文件粘贴到他的项目中?这么做太Low了。
在项目中如果碰到问题,把自己的代码”改乱了”,不小心把自己代码文件删除了,想要恢复怎么办?肯定不是每天都把自己的代码复制出来一份,放到一个文件夹里?这么做太Low了。
这些问题都可以使用版本控制软件完美的解决。
2. 市场上那些版本控制软件
2.1 CVS
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构,不支持分布式,CVS比较慢。
2.2 SVN
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
下图就是标准的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
- 服务器单点故障
- 容错性差
2.3Git
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:
二、Git简介
1. Git历史
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。
到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许上千个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
2. Git的简介
- Git是目前市场上最牛的版本控制软件。(没有之一)
- Git是一个开源免费的分布式版本控制系统。旨在快速高效地处理从小型项目到大型项目的所有内容。
- Git 不仅仅是版本控制系统,同时它也是内容管理系统(CMS),工作管理系统等。
- Git起初是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。所以Git和Linux命令完全兼容。
- Git是分布式的。可以通过Git从服务器上把完整的Git仓库克隆到本地。所以Git的很多操作都是本地的。
3.Git的优点
3.1 协同修改
多人并行不悖的修改服务器端的同一个文件。
3.2 数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
3.3 版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
3.4 权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。
3.5 历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理。
许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
4. Git官网
官网地址: https://git-scm.com/
5. Git工作流程
代码工作区—>执行git add —>暂存区(临时存储)—>执行git commit—>本地库(历史版本)
工作区、暂存区和本地仓库,逻辑上是本地计算机。当我们新建一个文件时,文件位于工作区,处于已修改(modified)状态,表明文件已进行了修改,但还没有提交保存;
通过命令 git add 将其添加到暂存区,文件是已暂存(staged)状态,表示把已修改的文件放到下次提交时要保存的清单中。
通过命令 git commit将文件放入本地仓库,文件为已提交(commited)状态,表示该文件已经被安全地保存在本地数据库中,到这一步可以说是成功生成了一个新的版本。远程仓库用来将本地仓库上传到网络,实现备份、共享和合作
三、 Git的安装
1. 安装步骤
全程闭着眼睛安装就可以了
安装完成后打开Git Bash窗口
输入git --version 输出版本信息证明安装成功
四、 Git 中常用命令
1. 创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
创建一个版本库非常简单,可以使用git bash也可以使用tortoiseGit。首先,选择一个合适的地方,创建一个空目录(D:tempgitrepository)
1.1第一步
1.2 输入init指令
1.3查看结果
版本库:“.git”目录就是版本库,将来文件都需要保存到版本库中。
工作目录:包含“.git”目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件才能保存到版本库中。
2. 添加文件
将文件添加到暂存区
git add 文件名
3. 提交文件
将文件提交到本地仓库
git commit -m "提交注释"
4.查看状态
查看目录中是否还有文件未提交
git status
5. 查看文件修改对比差异
比较文件差异
git diff
将工作区中的文件和暂存区进行比较
git diff [文件名]
6. 查看日志
查看历史记录,显示从最近到最远的日志
git log
7. 简化显示
git log --pretty=oneline
8. 查看简短日志
查看历史记录,并以简短信息显示
git reflog
HEAD@{移动到当前版本需要多少步}
9. 前进回退
前进后退版本
git reset --hard [局部版本号]
10. 删除文件
对于删除文件也可使用reset命令恢复
git rm [文件名]
如果删除文件后未提交可以使用checkout恢复
git checkout -- [文件名]
五、常见的远程仓库
1. Github
Github是目前全球最大的代码托管平台。也是Git官方指定的远程仓库。里面包含了全球很多开源项目。
但是由于Github是国外的服务器,所以在国内(尤其网络不是很好的地方)在进行推送内容或拉取内容时的速度可能不是特别快。
2. Gitee
Gitee 中文名称码云。
是国内目前最大的代码托管平台。号称中国版Github。是由开源中国推出的。
近几年在选择远程仓库时Gitee常作为国内开发者首选。
六、远程仓库操作(以码云为例)
1. 在码云注册账号
官网地址: https://gitee.com/
2. 创建远程仓库
2.1首先需要注册一直自己的账号。注册完成后进行登录。
2.2 登录成功后出现进入个人中心首页。点击右上角“+”-> 新建仓库 创建一个新的仓库
2.3 填写仓库信息。
注意:
仓库名称是必填项。
是否开源选择开源
取消勾选“使用Readme文件初始化这个仓库”
3 推送到远程
3.1Git 全局设置
git 想要把自己的内容提交到远程仓库,需要进行全局设置远程账号的用户名和邮箱。
设置自己的用户名,注意:修改成自己的用户名
git config --global user.name "bjsxt"
设置自己的邮箱,注意:修改成自己的电子邮箱
git config --global user.email "bjsxt@bjsxt.com"
设置成功后会在C:\Users\用户名(此目录是Windows系统账号名)中出现.gitconfig文件。此文件中存储了上面命令设置的账号及邮箱。
3.2 通过git init命令完成初始化
3.3 通过git commit -m “自定义注释” 可以把缓存区内容提交到本地库。
3.4 通过git remote add origin 仓库地址 设置远程仓库地址。
3.5 通过 git push -u origin master 把本地仓库内容提交到远程仓库。
输入完成命令后,在第一次提交会弹出输入用户名和密码的提示框。
3.6 当输入完成用户名和密码后会自动进行提交
3.7 在浏览器中刷新仓库页面,会发现文件已经上传到远程仓库
4. 把远程仓库克隆到本地的流程
4.1 复制远程仓库地址
在Gitee仓库中直接复制仓库地址。
4.2 克隆
在希望克隆远程仓库的目录中执行git clone 远程仓库地址 命令。
克隆完成后会在目录中出现一个和远程仓库同名的文件夹。
七、分支操作
1. 分支概念
分支不是GIT的专利,早在CVS时代就有了。分支对于团队来说作用太大了。比如说一个项目现在是1.0版,那么开发团队可能要同时进行1.1版和2.0版的开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。再比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布的。
在版本控制过程中,使用多条线同时推进多个任务。每条线成为一个分支。
1.1 Master
主分支;主要是稳定的版本分支,正式发布的版本都从Master拉。
1.2 Develop
开发分支;更新和变动最频繁的分支,正常情况下开发都是在Develop分支上进行的。
1.3 Release
预发行分支;一般来说,代表一个版本的功能全部开发完成后递交测试,测试出Bug后进行修复的分支。
1.4 Features
功能分支; 其实Features不是一个分支,而是一个分支文件夹。里面包含了每个程序员开发的功能点。Feature开发完成后合入Develop分支。
1.5 HotFix
最希望不会被创建的分支;这个分支的存在是在已经正式上线的版本中,发现了重大Bug进行修复的分支。
2.分支使用
2.1 创建分支
通过 git checkout -b 分支名 master 创建一个分支。
注意:此时创建的分支只是在本地仓库创建分支,远程仓库并没有创建。
2.2 查看分支
通过 git branch 查看本地所有分支。哪个分支是绿色且前面带有*号,是当前所在分支。
2.3 推送本地分支到远程
通过 git push origin 本地分支名:远程分支名 推送到远程仓库。
2.4 让本地分支和远程分支创建联系
通过git branch --set-upstream-to=origin/分支名 让本地分支和远程分支产生联系。
2.5分支切换
通过git checkout 分支名 可以实现各个分支之间的切换。
2.6 合并分支
通过git merge --no-ff 分支名 把分支合并到当前分支。
如果希望把develop合并到master分支中,需要先切换到master,然后执行合并命令。
2.7 删除本地分支
通过 git branch -d 分支名 删除本地分支。
需要注意:如果当前所在这个分支,是不能删除这个分支的。
可以通过切换到master,然后删除develop
2.8 删除远程分支
通过 git push origin --delete 分支名 删除远程仓库中分支。
八、IDEA中操作Git
1. 使用IDEA提交代码
1.1 在idea中配置git路径
1.2 在远程仓库上创建仓库
创建本地仓库
1.3 将项目添加到缓存
1.4 提交项目
1.5 提交并上传
1.6 添加远程仓库地址
1.7 查看上传状态
1.8 可能出现问题分析
如果上传时出现Push rejected: Push to origin/master was rejected 。代表本地仓库内容和远程仓库内容不一致。
解决办法:
选择你要上传代码的文件夹,鼠标右键git Bash Here
输入下面两行命令
git pull origin master --allow-unrelated-histories --把远程仓库中的内容 pull 到本地工作目录git push -u origin master -f --在 pull 下来的项目中做修改,通过以上命令 push 到远程仓库了
2. 在idea中用git获取新项目代码
2.1 第一步
2.2 第二步 :克隆远程仓库
3. 解决冲突
3.1 产生冲突的原因
冲突产生的根本原因是:两个人修改了同一个文件的同一块区域,在前者已经提交代码到远程仓库的情况下,后者修改代码前没有使用pull命令更新代码,而是修改完代码后再使用pull命令,这时就会产生冲突。这也是最常见的冲突,下面介绍解决冲突的办法也主要针对这种冲突。
3.2 预防冲突
在修改代码前,使用pull命令更新代码,能够保证在开始修改代码前本地的代码与远程仓库中的版本一致,这样能够大大降低冲突发生的概率。
3.3 解决冲突
按照图片中的步骤,顺序不能乱,先stash,然后pull,最后unstash
第一步:暂存代码,idea会恢复到上次更新后的代码,将修改的代码隔离出去
第二步:将远程仓库的代码拉下来
第三步:将暂存的代码还原回来
从左至右 【本地代码更新后的代码】【合并后的代码】 【暂存文件的代码】
4. idea结合分支的使用
4.1 查看/切换分支
4.2 新建一个分支
4.3 合并/删除分支实现
Git:版本控制控制软件相关推荐
- 版本控制工具简介(一)——git版本控制
1.git版本控制 1.1版本控制 版本控制的英文名称为(Version Control System),主要有以下几个作用. 记录文件的所有历史变化 错误恢复到某个历史版本 多人协作开发编辑同一个文 ...
- Git 版本控制之 GitFlow
来源: http://t.cn/EbZKx96 最近在着手制定开发规范,想要把项目正规高效的跑起来.计划引入 Git 版本控制,Git-Flow 便成为了首选.因为之前并没有过多接触,所以先花些时间 ...
- git版本控制工具(二)----本地版本库的常用操作
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 非程序员如何使用 Git——版本控制你的生活
在协同工作和版本控制方面,Git 绝对是一个优秀的工具,但其优点并不被大众所熟知.在过去的几年中,由于大众对于文字处理,电子表格(译者注:这里暗指Word和Excel,下同.)以及其他常用的功能的需求 ...
- git修改服务器的命令行,Git版本控制工具安装及命令行操作
很多小伙伴不知道如何来安装Git版本控制工具,对于命令操作比较陌生.本文做了一个详细的文档,希望对大家有所帮助. 1.git 是什么一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制 ...
- 《Git版本控制管理(第2版)》——4.3 Git在工作时的概念
本节书摘来自异步社区<Git版本控制管理(第2版)>一书中的第4章,第4.3节,作者:[美]Jon Loeliger , Matthew McCullough著,更多章节内容可以访问云栖社 ...
- 在Android Studio 上为项目添加Git版本控制
准备:Android Studio 需要配置GitHub ,配置方法在上一篇文章:https://blog.csdn.net/z1web/article/details/84106234 然后打开你想 ...
- git版本控制以及分支管理
git版本控制以及分支管理--一起乘坐时光机 四.深度剖析 一.版本控制---时光机穿梭 1.熟悉版本 2.版本回退 3.管理修改 1.管理修改以及理解工作的原理 2.撤销修改的内容 3.删除文件 二 ...
- 【Git版本控制管理】Gitee(码云)和GitHub的使用
远程仓库的使用 文章目录 远程仓库的使用 使用码云(Gitee) 使用GitHub 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读 ...
- Git版本控制工具的使用一
Git是一个开源的分布式版本控制工具,它的开发者就是Linux操作系统的作者Linus Tovarlds.Git被开发出来的初衷是为了更好的管理Linux内核,如今却被广泛地用于全球各大大中小型的项目 ...
最新文章
- R安装包源设置的常见方式及国内常用源
- jmeter察看结果树-响应数据乱码
- 注册机patch起什么作用_电机滑环起什么作用?
- 机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World
- C#中 ?? 的用法
- Windows查看开关机记录
- github whs_从iPhone或iPod Touch获得WHS的基本访问权限,而无需安装应用程序
- 机器人波波熊_【菠菠智能悦读机器人绘本更新篇】新技能get!BoBo本周新增绘本103本!...
- 求生之路2 服务器显示人满,求生之路2服务器怎么设置人数
- 职场成功学—项目管理之目标管理
- 达梦数据库连接报错 error code=-70028 Create SOCKET connection failure. 创建SOCKET连接失败
- linux备份文件到ftp上,Linux如何利用ssh传送文件至FTP空间进行备份
- 用scratch编程一个问答游戏
- LeakCanary原理解析
- ECDSA算法加解密验签
- 关于jquery.flexslider-min.js插件
- maven 配置 mvn -v
- Excel 数据导入SQL XML 自动生成表头
- 仿迅雷播放器教程 -- 权威界面库对比 (8)
- datagridview2.rows.add 添加到最后一行_台美樱花红发展公司一行来我市进行樱花观赏园项目考察...