git简介
1. 什么是版本控制
本章节学习目标:
- 什么是版本控制
- 为什么要进行版本控制
- 常用的版本控制工具
什么是版本控制
- 版本控制(Revision control)是一种软件工程技巧
- 籍以在开发的过程中,确保由不同人所编辑的同一档案(项目代码)都得到更新。
为什么要版本控制
- 查看以往的代码修改记录及变化
- 恢复到历史某个时间的代码
- 协同开发时,合并同一文件中不同开发者写的代码
- 协同开发时定位修改代码的责任人
- 统计工作任务量
- 备份源代码
- 项目分享
常用的版本控制工具
- CVS:早期版本管理软件
- ClearCase:IBM企业级大型版本管理工具, 收费。
- VSS:微软推出的版本管理工具, 较少使用
- SVN:市面最流行的版本管理工具之一,拥有CVS所有功能,修复了CVS的不足
- GIT:分布式版本管理工具。已经是大势所趋。
2. git介绍
本章节学习目标:
- 了解git的历史
- 理解集中式和分布式版本控制的区别
- 理解git的工作流程
git来历
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。
到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许上千个并行开发的分支)
- 完全分布式 和svn最主要的区别
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
git与svn区别
svn是集中式版本控制系统
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而编写代码的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新版本的代码,然后编写代码,完成后需要把自己的代码推送到中央服务器。
集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就会非常影响工作效率。
- 集中式版本控制系统的优点:
- 在一定程度上看到其他开发人员在干什么,
- 管理员也可以很轻松掌握每个人的开发权限。
- 集中式版本控制工具缺点更明显:
- 服务器单点故障
- 容错性差
git是分布式版本控制系统
Git是分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库。这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
小结
-
svn:是个集中式的版本控制系统。有个中心点(svn服务器),每个客户端都对中心点有强依赖。
一旦svn服务器出错,所有人都不能再进行版本控制了
每个人都必须要联网,连接上svn服务器才可以进行版本控制
-
git:是个分布式的版本控制系统。没有中心点,每个人都可以独立进行版本控制
即使没有联网,每个人也可以进行版本控制
四、git安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上运行。后来也把git移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行。由于开发机大多数情况都是windows,所以这里只讲解windows下的git的安装及使用。
1. 软件下载
下载地址:https://git-scm.com/download
参考资料中已经提供好了安装包
2. 安装git
2.1 双击安装包启动安装
2.3 一路“Next”全部默认,直到安装完成
3. 安装TortoiseGit
3.1 安装小乌龟
1) 双击安装,选择安装路径
-
双击TortoiseGit安装包,选择安装路径。
-
注意:安装路径里不要有中文、空格、特殊字符
##### 2) 选择语言 -
安装后会进入首次配置向导。选择语言:English
3) 选择git路径
- 选择刚刚安装git.exe的目录
4) 设置个人信息
- 设置开发者的姓名和邮件。每次提交代码时都会把此信息包含到提交的信息中。
- 名称和邮箱:名称建议使用英文字母+数字;邮箱建议使用真实邮箱
3.2 配置语言
1) 安装语言包
安装语言包:直接双击即可安装语言包
2) 设置语言
在桌面上空白位置右键,打开TortoiseGit的设置
3.3 重启电脑
安装完成之后,需要重启电脑
五、git使用
1. git的工作流程【理解】
本章节学习目标:
- 理解git的工作流程
- clone:从远程仓库中克隆 Git 资源作为本地仓库,第一次从远程仓库下载一个项目。
- checkout:从本地仓库中checkout代码然后进行代码修改。主要是分支的操作【目前先不管】
- add:在提交前先将代码提交到暂存区。
- commit:提交修改。提交到本地仓库工作区。本地仓库工作区中保存修改的各个历史版本。
- push:在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。
3. 使用小乌龟操作
本章节学习目标:
- 使用小乌龟(TortoiseGit)操作git
步骤
- 能够使用小乌龟初始化本地仓库
- 能够设置忽略资源
- 能够添加文件到暂存区,提交文件
- 能修改文件并提交
- 能查看历史记录、比较差异、恢复代码
- 能删除文件
操作
1. 初始化本地仓库
4. 修改提交
修改后未提交文件图标是红色的感叹号。
5. 查看历史记录
在开发过程中可能会经常查看代码的修改历史,或者叫做修改日志。来查看某个版本是谁修改的,什么时间修改的,修改了哪些内容。
可以在文件上或空白处点击右键选择“显示日志”来查看文件的修改历史。
7. 代码恢复
假如写了很多代码后发现方向错误,要恢复到以前的版本,可以分两种情况进行恢复:
1. 还没有提交,要恢复
如果文件修改后还没有提交,可以直接还原。
例如我们又修改了pom.xml,但是还没有提交。在文件上右键直接还原
8. 删除文件
如果某些文件没用了,需要删除掉。这时可以
- 使用git提供的删除功能,直接将文件从版本库中删除。
- 删除后提交到版本库
六、git远程仓库
1. gitee配置
本章节学习目标:
- 能够注册并配置gitee帐号
现在我们已经在本地创建了一个Git仓库。假如又需要让其他人来协作开发,就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份。
常用的远程仓库就是github:https://github.com/,或者码云 https://gitee.com (国内版本的GitHub)
接下来我们演示如何将本地代码同步到码云gitee。gitee和GitHub的操作一模一样
1.1 注册gitee帐号
要求每个人都注册一个gitee帐号
1.2 在gitee创建仓库
通常是一个项目,要创建一个仓库
1. 新建仓库
2. 设置仓库名称
- 通常是把项目名称 作为 仓库名称来使用
- 开源:这个仓库里的所有内容,可以被所有人看得到,被所有人下载仓库的内容。但是其它人不能修改
- 私有:这个仓库里的内容,只有自己和设置的成员可以看到,其它人看不到
3. 查看仓库地址
- HTTPS地址是:https://gitee.com/liuyp100/rbac.git
- SSH地址是:git@gitee.com:liuyp100/rbac.git
2. 推送代码到gitee
本章节学习目标:
- 能够把本地仓库的内容推送到gitee
2.1 配置ssh密钥
创建gitee仓库后,如果我们要把自己本地仓库的代码推送到gitee远程仓库,就需要提供gitee身份验证信息、加密信息。gitee支持两种代码同步方式:https和ssh。
-
https方式:每次把本地仓库代码推送到远程仓库,都需要输入自己的gitee帐号和密码
-
ssh方式:每次把本地仓库代码推送到远程仓库时,不需要提供自己的gitee帐号和密码
但是需要我们生成一对密钥:公钥配置到gitee上,私钥自己保留
后续每次推送时,gitee都会验证公钥和私钥是否匹配。如果匹配,就可以推送
如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。而且如果是公司配置的私有git服务器一般不提供https方式访问,所以我们着重说明“ssh”方式。
什么是SSH协议
SSH,全称是Secure Shell,是建立在应用层基础上的安全协议外壳。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
- 通过使用SSH,可以把所有网络传输的数据进行加密。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
- 使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
生成SSH密钥
在windows下我们可以使用 Git Bash.exe来生成密钥,右键菜单打开Git Bash。
- 在桌面上右键,选择 “Git Bash Here”,打开git bash界面
- 执行命令,生成密钥。
- 命令:
ssh-keygen -t rsa
,然后一路回车,采用默认配置
- 命令:
- 查看生成的密码:
执行命令完成后,在C:\Users\用户名\.ssh
下面生成如下名称的公钥和私钥:
公钥:需要上传到gitee
私服:需要配置到自己的客户端
2.2 在TortoiseGit上配置ssh.exe
在桌面上右键,打开TortoiseGit的设置界面
2.3 推送代码到远程仓库
- 在本地仓库的工作目录里推送代码
2.设置远程仓库的信息
3.点击“确定”开始推送
3. 从远程仓库克隆
初次从远程仓库里获取项目代码的过程,叫克隆。克隆后会创建一个新的本地仓库。选择一个任意文件夹,然后使用TortoiseGit克隆远程仓库。
- 在桌面上空白位置右键,克隆
. - 查看克隆下来的代码
4. 从远程仓库更新代码
如果其它人向远程仓库里推送了代码,我们需要从远程仓库获取最新代码。
使用小乌龟TortoiseGit,从右键菜单中点击“拉取”
5. 解决冲突
场景说明
解决冲突(小乌龟版本)
1. 拉取代码
拉取代码,如果没有冲突会拉取成功。如果有冲突会拉取失败
拉取后在所有冲突的文件上,会有感叹号图标。我们需要挨个解决所有的冲突
拉取后:
3. 提交并推送到远程仓库
右键提交,在弹出的窗口里选择“提交”;然后推送到远程仓库
4. 通知对方拉取最新代码
七、git整合idea
1. idea配置git
1.1 配置git
注意:建议使用idea2018.2(idea2019.2版本可能有问题)
1.2 创建一个新的project
-
说明:在idea里使用git,是基于project操作的。
在大型项目开发中,通常是一个项目要创建一个project,其中有很多Module;这多个Module共同组成一个完整的项目
2. 添加工程到gitee
注意:在做一切添加、提交、推送等操作之前,先设置忽略文件
2.1 设置忽略文件(不推送.idea和iml以及所有编译target文件)
可以在工程里手动创建.gitignore文件,编写要忽略的文件。也可以使用idea的.ignore
插件来辅助编写。
在父工程上右键,创建文件,名称为.gitignore
在.gitignore
文件中,增加target、.idea、*.iml三项
target/
*.iml
.idea/
2.2 创建本地仓库
2.3 将工程添加到本地仓库
1. 添加到暂存区
2.4 将工程推送到远程仓库
1. 在gitee新建仓库
略