目录
一、版本控制
我们所用的Git就是最常用的一种版本控制工具,所以我们有必要了解一些版本控制的基本知识
1、什么是版本控制?
版本控制(Revision control)
是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
- 可以把一个
版本控制系统(Version Control System)
理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。
2、版本控制的作用
1. 追踪文件的变更
版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加
2. 并行开发
软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
3、版本控制的内容
1. 检入检出控制
实际开发过程中,我们对源文件的修改并不是在
软件配置管理库
中,而是每个人都有自己的工作空间,对源文件的修改依赖于基本的文件系统在自己的工作空间下进行
访问控制
需要管理各个人员存取或修改一个特定软件配置对象的权限。
- 开发人员能够从库中取出对应项目的配置项进行修改,并检入到软件配置库中,对版本进行“升级”;
- 配置管理人员可以确定多余配置项并删除。
同步控制
的实质是版本的检入检出控制
,可用来确保由不同的人并发执行的修改不会产生混乱。
检入
就是把软件配置项从用户的工作环境存入到软件配置库的过程检出
就是把软件配置项从软件配置库中取出的过程- 检人是检出的逆过程
2. 分支和合并
首先了解一下两个基本的概念:
版本分支
:以一个已有分支的特定版本为起点,但是独立发展的版本序列
版本合并
:来自不同分支的两个版本合并为其中一个分支的新版本
版本分支
的人工方法就是从主版本(主干)上拷贝一份,并做上标记。
- 在实行了版本控制后,版本的分支也是一份拷贝,这时的拷贝过程和标记动作由版本控制系统完成。
版本合并
有两种途径:
- 将版本A的内容附加到版本B中
- 合并版本A和版本B的内容,形成新的版本C
3. 历史记录
版本的历史记录有助于对软件配置项进行审核,有助于追踪问题的来源。
历史记录包括:
- 版本号
- 版本修改时间
- 版本修改者
- 版本修改描述等最基本的内容
- 还可以有其他一些辅助性内容,比如版本的文件大小和读写属性。
4、常见的版本控制工具
主流的版本控制器有如下这些:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
现在影响力最大且使用最广泛的是Git与SVN
5、版本控制的三大类
1. 本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合
个人
用,如RCS。
2. 集中版本控制
所有的版本数据都保存在
服务器
上,协同开发者从服务器上同步更新或上传自己的修改
- 代表产品:
SVN
- 所有的版本数据都存在
服务器
上,用户的本地只有自己以前所同步的版本 - 如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。
- 所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
3. 分布式版本控制
所有版本信息仓库全部同步到本地的每个用户
- 代表产品:
Git
,Git是目前世界上最先进的分布式版本控制系统。
-
每个人都拥有全部的代码,有很大的安全隐患
-
可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
-
由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
-
不会因为服务器损坏或者网络问题,造成不能工作的情况!
6、Git与SVN的主要区别
-
SVN是
集中式版本控制系统
,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。 -
Git是
分布式版本控制系统
,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
二、最新版Git的安装配置
1、Git的卸载(先前已安装)
-
首先在系统环境变量
path
中删除Git
的配置
-
打开控制面板(win+r再输入control),直接卸载
卸载完即可
2、安装最新版Git
官网:https://git-scm.com/(如果下载速度很慢,建议用以下镜像地址进行下载)
镜像地址:http://npm.taobao.org/mirrors/git-for-windows/
这里选择最新版进行下载,选择自己对应的系统进行下载,这里为Windows
下载完后,点击安装
-
安装路径最好选择自己的路径
-
此处默认即可
-
下一步默认
-
这里是选择默认的文本编辑器,大家选择自己电脑上使用的即可,这里选择Sublime
-
接下来的操作默认即可,直接next
最后等待安装完成即可
然后可以发现多了一些组件
-
Git Bash
:Unix与Linux风格的命令行,使用最多,推荐最多 -
Git CMD
:Windows风格的命令行 -
Git GUI
:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
同时我们在任意地方鼠标右键,可以看到新添加的功能
注意:Git环境变量的配置在安装的时候已经自动添加,不用再配置
3、Git配置
1. 查看配置相关命令
查看配置
git config -l
查看不同级别的配置文件
#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global --list
2. 修改Git配置文件
首先了解两种等级的配置文件
1、system系统级配置文件
位置:
Git安装目录/etc/gitconfig
2、global全局配置文件
位置:C盘/用户/用户名/.gitconfig
设置用户名与邮箱
每次Git提交时都会使用该信息,需要预先设置好
git config --global user.name "zsr204" #名称
git config --global user.email "1412578784@qq.com" #邮箱
--global
是全局配置选项,如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global
选项
再次查看配置文件即可看到修改内容
三、Git的分区和基本流程
1、四个分区
前三个区域是本地的,第四个区域是远程的
工作区(WorkSpace)
:本地存放项目代码的目录暂存区(Stage/Index)
:是一个文件,临时存放对文件的更改,保存即将提交到文件列表信息本地仓库(Repository)
:安全存放数据的位置,包含提交的所有版本的数据;HEAD指向最新放入仓库的版本远程仓库(Remote)
:托管代码的服务器,比如Gitee、Github等
文件在这四个区域之间的传输命令如下:
日常使用的六个命令
2、工作流程
1、在工作目录
中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域
;
3、将暂存区域的文件提交到git仓库
。
由此可见,git管理的文件有三种状态:已修改(modified)
,已暂存(staged)
,已提交(committed)
四、Git项目搭建
1、创建本地工作目录
工作目录是通过Git帮助你管理的文件夹
-
可以是项目的目录
-
也可以是一个空目录,建议不要有中文
这里在任意地方新建一个空文件夹GitCode
,作为Git管理的项目文件夹
2. 搭建本地仓库
有两种方式:
- 创建一个新的仓库
- 克隆远程仓库
方式一:创建新的仓库
在需要用Git管理的项目目录执行以下代码:
#在当前目录新建一个Git代码库
git init
在上述第一步新建的目录中空白位置右键Git Bash
,输入上述代码
执行完成后,就可以看到新生成了一个.git
目录,关于版本的信息都在这个目录里面
注意:.git
目录是一个隐藏目录,需要设置显示隐藏目录
方式二:克隆远程仓库
另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地,而不是取某一个特定版本,所以用clone而不是checkout
# 克隆一个项目和它的整个代码历史(版本信息)
git clone [url]
我们可以去 gitee 或者 github 上克隆一个测试!
这里再Gitee上新建了一个新仓库GitCode
,复制url地址
https://gitee.com/zhong_siru/git-code.git
然后回到我们本地需要Git管理的项目目录,右键Git Bash
(这里先删除刚刚生成的.git
目录)
然后发现新生成了一个文件夹,这就对应着远程仓库里的内容
五、Git文件操作
1. 文件的四种状态
Untracked
:未跟踪,此文件在工作文件夹中,但并没有加入到git库,不参与版本控制,通过git add
状态变为Staged.Unmodify
:文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件Modified
:文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !Staged
:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
2. 查看文件状态
上面说文件有4种状态,通过如下命令可以查看到文件的状态:
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
#添加所有文件到暂存区
git add .
#提交暂存区中的内容到本地仓库 -m 提交信息
git commit -m "消息内容"
3. 忽略文件 .gitignore
在使用
git
的过程中,一般我们总会有些文件无需纳入git
的管理,也不希望它们总出现在未跟踪文件列表,这些文件通常是日志文件、临时文件、编译产生的中间文件、工具自动生成的文件等等。
.gitignore
文件就可以控制忽略某些文件纳入版本控制中
格式规范
- 所有空行或以
#
开始的行将会被忽略 - 要忽略指定模式以外的文件或目录,可以在模式前加上感叹号
!
进行取反 - 如果名称的最前是路径分隔符
/
,表示要忽略的文件在此目录下,而子目录中的文件不忽略 - 如果名称的最后是路径分隔符
/
,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
glob模式
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式
- 星号
*
代表任意多个字符 - 问号
?
代表一个字符 - 方括号
[abc]
代表可选字符范围 - 大括号
{string1,string2,...}
代表可选的字符串等
示例
logs/ #忽略当前路径下的logs目录,包含logs下的所有子目录和文件
/logs.txt #忽略根目录下的logs.txt文件
*.class #忽略所有后缀为.class的文件
!/classes/a.class #不忽略classes目录下的a.class文件
tmp/*.txt #只忽略tmp目录下的.txt文件
**/foo #可以忽略/foo, a/foo, a/b/foo等
六、使用码云作为远程仓库
1、设置本机绑定SSH公钥
该步骤可以实现免密码登录,码云是远程仓库,我们是平时工作在本地仓库,免密码登录十分重要
首先进入C:\Users\用户名\.ssh目录
然后再目录中空白处右键Git Bash
,输入以下代码,一路回车
# 生成公钥
ssh-keygen -t rsa
然后就会生成这两个文件
2、将公钥添加到码云SSH公钥中
打开id-rsa.pub
文件
复制,粘贴到Gitee公钥中,会自动生成标题
然后点击确定,输入密码验证,成功
然后就可以看到新添加的SSH公钥
3、创建一个自己的远程仓库
点击新建一个仓库
点击创建,创建成功
然后克隆远程仓库到本地目录,清空我们上述新建的GitCode
目录,右键GitBash
复制远程仓库的url,然后输入以下命令
git clone https://gitee.com/zhong_siru/remote.git
七、IDEA2020中集成Git
1、新建一个SpringBoot项目,绑定git
对应的项目目录:
接下来要绑定Git,只需要将远程Git文件拷贝到该项目目录中即可
我们之前新建好了仓库remote
,将其中的文件拷贝到该项目目录中
这样该项目下,就有了.git
文件夹
回到IDEA,可以发现相应的变化
到此,Git就绑定成功了
2、使用IDEA操作Git
首先需要了解一些IDEA中的一些基本操作
-
点击下方的
Git
(或者alt+9)可以查看关于仓库的所有信息
-
拉取、提交按钮的位置
1. add
添加到暂存区
我们手动进行add
,打开IDEA的Terminal
,输入以下命令将代码添加到暂存区
git add .
然后可以看见项目目录被add
的文件变成绿色
如果我们修改了某个文件,可以直接右键进行add
更改内容到暂存区
2. commit
提交到本地仓库
点击上述提交按钮或者(ctrl+k)
2020IDEA代码提交已经不是以前那种模态化弹框式
窗口,现在集成到左边commit
侧边栏中
如果想使用以前弹出式的提交窗口,可以按下图所示进行切换
切换后,想要换回来,可以在如下图所示进行设置
提交代码前,需要做相关设置
勾选要提交的文件,然后填写提交的信息,然后点击Commit
提交完成后,点击Git
可以查看关于仓库的所有信息,我们在Log
中可以看到我们刚提交的操作以及提交的文件
同时在Console
控制台可以看到相关信息
3. push
到远程仓库
同样在
Terminal
中输入以下代码,push到远程仓库
git push
出现如下结果即成功
然后我们打开前面在Gitee新建的远程仓库检验,可以看到我们提交上来的文件
3、举例
我们随便在一个地方新建一个Hello类,这时候显示为红色
然后会弹框提示你是否将这个文件添加到Git
我们点击Add
即可添加到Git,然后可以看到文件变为绿色
接下来,我们通过命令行的方式将这个添加的Hello.java
添加到远程仓库
打开Terminal
窗口,先后输入以下三个命令
git add .
git commit -m "new .java file Hello"
git push
同样,我们可以查看我们提交的相关信息
然后打开Gitee,可以看到我们刚提交的代码
八、GIT分支
1、初识Git分支
几乎所有的版本控制系统都以某种形式支持分支。
- 使用分支就是可以把你的工作从开发主线上分离开来,以免影响开发主线。
- 在很多版本控制系统中,该过程略微低效——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。
Git
处理分支的方式十分轻量,创建新分支几乎能在瞬间完成,并且不同分支之间的切换操作十分便捷- 所以有人把 Git 的分支模型称为它的
必杀技特性
我们可以在Gitee随便找一个项目,查看其分支,通常是一个主分支master
加上开分分支dev
和其他一些版本的分支
master
主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作- 工作一般情况下在新建的
dev
分支上工作 - 工作完后,比如要上线发布,或者说dev分支代码稳定后可以合并到主分支master上来。
2、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]
3、IDEA中分支操作
我们也可以在IDEA中查看分支,并进行相应的操作
项目右键,点击Git
,然后点击Repository
,然后点击Branches
然后弹出以下分支信息
然后我们可以在指定分支右键进行相应的分支操作
九、Git相关资料
在Gitee中有关于Git
的相关资料,大家可以自行查看
Git大全:https://gitee.com/all-about-git
Git命令大全:https://oschina.gitee.io/learn-git-branching/
转载:https://blog.csdn.net/qq_45173404/article/details/108318818