文章目录
版本控制
什么是版本控制
什么是版本控制? 版本迭代、新的版本!
版本控制(Revision Control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
常见的版本控制工具
多人开发就必须要使用版本控制!
常见的版本控制工具
主流的版本控制器有如下这些:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN。
版本控制分类
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。
3、分布式版本控制 Git
每个人都拥有全部的代码!安全隐患!
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
Git与SVN的主要区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
Git是目前世界上最先进的分布式版本控制系统。
Git的历史
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
Linux社区中存在很多的大佬!破解研究 BitKeeper !
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。(2周左右!) 也就是后来的 Git!
Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!
Git安装与配置
下载地址:https://git-scm.com/downloads
最新版:2.28.0。
安装完成!
Git Bash: Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD: Windows风格的命令行
Git GUI: 图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
环境变量的配置
D:\Program Files\Git\bin
添加到环境变量PATH中。
在Bash窗口使用Linux命令操作。
鼠标右键即可选择Git客户端的命令行窗口。
设置用户名和邮箱(用户标识,必要的)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息,它被永远的嵌入到了你的提交中:
git config --global user.name "ShawnYue08" #名称
git config --global user.email 1625454122@qq.com #邮箱
只需要做一次这个设置,如果你传递了–global 选项,Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。
Git的配置
所有的配置文件,其实都保存在本地!
查看配置
git config -l
Git相关的配置文件:
1)D:\Program Files\Git\mingw64\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[http]
sslBackend = openssl
sslCAInfo = D:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
autocrlf = true
fscache = true
symlinks = false
[pull]
rebase = false
[credential]
helper = manager
2)C:\Users\shawn\ .gitconfig 只适用于当前登录用户的配置 --global 全局
[user]
email = 1625454122@qq.com
name = ShawnYue08
[credential]
helper = manager
查看不同级别的配置文件:
#查看系统config
git config --system --list
#查看当前用户(global全局)配置
git config --global --list
TortoiseGit的安装
不同的是:git是命令行操作模式,TortoiseGit界面化操作模式,不用记git相关命令就可以直接操作。
下载地址:https://tortoisegit.org/download/
最新版:2.10.0。
在安装过程中需要注意的:
1、配置git.exe
2、配置用户信息
安装完成后,鼠标在桌面/目录右键,会增加三个选项,Git Clone,Git Create repository here,TortoiseGit。
下载简体中文语言包
Git基本理论
三个区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。
Git项目搭建
创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
日常使用只要记住下图6个命令:
本地仓库搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
1、创建全新的仓库(本地文件夹),E:\XiBuKaiYuan\Git\LocalRepository
,在文件夹内部打开Git Bash;
会发现多出了一个隐藏文件夹.git,刷新后,这个文件夹上会有一个勾;
LocalRepository就是工作目录。.git就是版本库。
克隆远程仓库
1、另一种方式是克隆远程仓库,是将远程服务器上的仓库完全镜像一份至本地!
# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url] https://github.com/ShawnYue08/mybatis-plus-doc.git
2、去 gitee 或者 github 上克隆一个测试!
Git文件操作
在本地仓库新建一个文件
先添加到Index暂存区;
# git add 文件名称 添加文件到暂存区
# git add . 添加所有文件到暂存区
提交commit
# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息 commit命令一定要带这个参数
修改文件
已经提交到版本库的文件不可避免的会被修改。
重新提交
点击提交即可。
图标又变为了绿色。
查看修改历史
TortoiseGit,显示日志。
查看某个版本是谁修改的、什么时间、修改了哪些内容等。
比较差异
TortoiseGit,与上一版比较差异。
还原修改
当文件修改后,不想把修改的内容提交,想要还原到未修改之前的状态,此时可以使用还原功能。
新建文件MyTest.txt,内容为HelloWorld字符串。
添加到暂存区,提交到版本库。
但是不想修改了,要还原到以前的版本。
TortoiseGit,还原。
删除文件
TortoiseGit,选择删除,这样只是从工作目录删除,要想从版本库中删除必须提交。
查看版本库
TortoiseGit,选择版本库浏览器;
查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt #忽略所有.txt结尾的文件,这样的话上传就不会被选中!
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
添加一个大的Java本地项目
添加Add后,可以用TortoiseGit删除并添加到忽略列表完成忽略。
将target目录、.idea目录和.iml文件作为忽略目录和文件;
保留本地文件,选择是。
TortoiseGit,提交;
查看版本库浏览器:
GitHub远程仓库
GitHub支持两种同步方式:HTTPS和SSH。
注册账号,登录GitHub网站。
HTTPS同步
创建一个仓库GitLearn
远程仓库,把我们本地的仓库同步push到远程仓库。
首先我们使用HTTPS同步方式;
在本地仓库中,鼠标右键,选择Git同步;
选择管理远端URL;
点击确定后,点击推送;
查看远端仓库;
HTTPS克隆
将远程仓库的项目(MyBatis-3)克隆到本地使用HTTPS方式。
SSH同步
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
在windows下我们可以使用 Git Bash.exe来生成密钥,可以通过开始菜单或者右键菜单打开Git Bash。
在下面的界面选择右上角的New SSH Key;
选择.pub文件,打开,将里面的全部复制到下面的位置;
IDEA配合GitHub网站上传项目
1、在IDEA中配置Git和GitHub网站的用户名和密码
2、在IDEA中创建工程
3、将此工程上传到GitHub网站,IDEA会自动帮我们在网站上创建仓库,仓库名就是项目名;
新增文件,并push到远程仓库;
4、下面这种方式也可以推送到GitHub仓库
从GitHub网站克隆项目到IDEA
如果只是想要把项目克隆到本地,那么可以使用TortoiseGit,点击Git克隆,然后填写url即可。
方式一:
但是,选择从GitHub网站克隆项目时,速度特别慢。
此时,可以在国内的码云上创建仓库,导入已有仓库,GitHub仓库的URL。
然后从码云上克隆项目到本地。
码云速度快多了。
分支
分支简介
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。
有人把 Git 的分支模型称为它的“必杀技特性”,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。 理解和精通这一特性,你便会意识到 Git 是如此的强大而又独特,并且从此真正改变你的开发方式。
创建分支
新建文件夹MyBranchTest,进入文件夹,使用TortoiseGit,在这里创建版本库。
新建文本文件基本功能.txt,提交到master分支。
当我希望在基本功能的基础上添加额外功能还不想影响原有的代码时,可以创建分支。
右键,TortoiseGit,创建分支,
切换分支
右键,TortoiseGit,切换/检出;
新建视频功能.txt,添加,提交到dev分支。
此时dev1分支存在两个文件,而master分支只有一个基本功能.txt文件。
当我在dev1分支下时,文件夹中有两个文件,当我切换/检出到master分支时,文件夹只有一个基本功能.txt文件。
然后可以在master分支的基础上,新建一个分支dev2,开发音频功能.txt。
合并分支
现在要合并dev1分支和dev2分支到master分支。
首先切换到master分支。
右键,TortoiseGit,合并分支。
合并dev1分支。
合并dev2分支。
OK,合并完毕。
删除分支
假如dev1分支和dev2分支已经完成使命,将他们各自的代码合并到了master分支,要想删除分支呢?
在master分支下,右键,TortoiseGit,选择浏览引用。
IDEA下的分支操作
使用我们之前的上传到GitHub网站的项目,GitTestDemo。
这个项目目前只有master分支。
如何在GitHub上查看分支?
创建分支
如何在IDEA下创建分支?
新建dev1分支并切换;
在dev1分支下,新建视频功能的类;
push到远程仓库;
在GitHub远程仓库的dev分支下,才可以看到Video类。
切换分支
在IDEA里切换分支特别简单,只需要点击项目右下角的分支即可。
点击哪个分支,切换到哪个分支,点击之后,点击checkout即可。
合并分支
按照切换分支的方法,首先切换到master分支;
合并dev1分支到master分支后需要push到远程仓库
删除分支
dev1分支任务完成,如果想要删除分支。
既要删除本地分支,也要删除远端分支。
删除完毕后,本地和远程都只剩master分支。
IDEA下的忽略文件
有时候不想把项目所有文件夹/文件提交到远程仓库,这时就需要忽略文件。
新建一个GitTestDemo2普通项目。
添加本地仓库,作为一个Git项目。
下面介绍一款忽略文件的IDEA插件。
通过它可以很好的配置项目中的忽略文件。
(在IDEA的设置plugins下搜不到,选择在IDEA官网下载,然后引入即可)
https://plugins.jetbrains.com/plugin/7495–ignore
打开项目,
如果这个不出现的话,还可以