概述
1.掌握从远程仓库克隆项目
2.掌握将本地仓库代码推送(push)到远程仓库
3.掌握从远程仓库拉取(pull)最新代码
4.掌握如何解决冲突
1. Git简介
1.1. Git是什么?
Git是目前世界上最先进的分布式文件版本控制系统工具(没有之一)。对于我们java程序员而言,管理的就是代码文件版本。
1.2. Git和GitHub
什么是GitHub?
确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办。这是它的 Logo:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMZek4cs-1575802232643)(assets/1558506063331.png)]
2008年4月10日,GitHub正式成立,主要提供基于git的版本托管服务。一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开源社区。 所以 Git 只是 GitHub 上用来管理项目的一个工具而已,但是GitHub 的功能可远不止于此!
**1.3. **集中式和分布式
1.3.1. 集中式版本控制(SVN)
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件
下图就是标准的集中式版本控制工具管理方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v8b1BHAF-1575802232644)(assets/1558506140040.png)]
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
l 服务器单点故障
l 容错性差
1.4. 分布式版本控制
Git是分布式版本控制系统,那么它可以没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qt3A7KY-1575802232645)(assets/1558506165102.png)]
2. Git安装
2.1. 下载
下载地址:https://git-scm.com/download
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dYbzTEUT-1575802232645)(assets/1558506207794.png)]
或者我们也可以使用课前资料提供的安装包:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zaw9ApiF-1575802232645)(assets/1558506245369.png)]
2.2. 安装git for windows
双击安装:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q8OBGSJB-1575802232646)(assets/1558506302254.png)]
一路“Next”使用默认选项即可。
安装完成后,可以在任意文件夹点右键,看到如下菜单:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R5v0tOIQ-1575802232646)(assets/1558506938227.png)]
点击后,出现Git的控制台,在控制台输入git,可以看到相关的帮助信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzYNbEiy-1575802232646)(assets/1558506413273.png)]
3. Git的基本使用
3.1. 创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。
创建一个版本库非常简单,
1)首先,选择一个合适的地方,创建一个空目录。我在本机的D:test目录下,创建了一个Hello目录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GPDORk2C-1575802232647)(assets/1558506640325.png)]
2)使用git init命令把这个目录变成Git可以管理的仓库: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKoWRlFQ-1575802232647)(assets/1558506739929.png)]
命令输入后,会提示你,已经创建了一个空的Git仓库。此时你会在hello目录下发现一个隐藏目录.git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TzZjMSwG-1575802232647)(assets/1558506790995.png)]
这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
此处的hello目录就是我们的:工作区,存放所有当前文档。此目录下的文件才会被Git管理
hello中的.git目录就是我们的:本地仓库,管理并保存所有的文档变化及历史状态。
总结:创建版本库的步骤:
1) 进入需要管理的目录
2) 执行 git init 命令
3.2. 添加文件并提交
版本控制系统,其目的就是跟踪文本文件的改动,例如我们开发时编写的.java、.xml、.properties本质都是文本文件。文件中每一个字符的变化都会被跟踪并且管理。
1)我们在当前的hello目录下创建一个新的文本文件:readme.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnoV11U8-1575802232648)(assets/1558507115035.png)]
编写一段文字(注意,一定不要用windows的记事本):hello git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMuFPaL1-1575802232648)(assets/1558507155864.png)]
2)接下来,我们使用 git add 命令,将文件添加到暂存区
git add 文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6ZC70Vb-1575802232648)(assets/1558507293796.png)]
没有任何的反应,证明没有问题
3)使用 git commit 命令,将暂存区文件提交到本地仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXHIuwRd-1575802232649)(assets/1558507658192.png)]
如果是第一次安装使用git,提交的时候需要认证用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4WJBcMs-1575802232649)(assets/1560737345475.png)]
命令解释:
git commit 命令可以将暂存区的文件提交到版本库。
-m 参数,是本次提交的说明信息,用来注释本次提交做了些说明事情。
总结,将一个文件添加到本地仓库,分两步:
3) 使用 git add 命令,添加文件。可以一次添加多个文件。
4) 使用 git commit 命令,提交,一次即可。
可能大家会有疑问,为什么这里不是直接commit提交,而是要经过add和commit两个步骤呢?
这就关系到Git的版本库中的 工作区 暂存区概念了。
3.3. 工作区/暂存区/版本库
我们先来理解下Git 工作区、暂存区和版本库概念
3.3.1. 工作区:
工作区就是你在电脑里能看到的目录。比如我们刚刚创建的hello目录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7JRzSoo-1575802232649)(assets/1558507960964.png)]
其中包含了一个隐藏目录 .git ,其它就是我们需要被管理的文件。
3.3.2. 版本库及暂存区
工作区有一个隐藏目录**.git**,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7y5UUR7r-1575802232650)(assets/1560737368971.png)]
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
3.4. 管理文件修改
被版本库管理的文件不可避免的要发生修改,此时只需要直接对文件修改即可。修改完毕后需要将文件的修改提交到版本库。
我们对readme.txt文件进行修改,添加一行数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jJlJBhu-1575802232650)(assets/1558508321605.png)]
3.4.1. 差异比较
用git diff – readme.txt命令可以查看工作区和版本库里面最新版本的区别:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A99I1N0N-1575802232650)(assets/1558508500386.png)]
可以发现,与版本库中的 readme.txt相比,我们多了一行文本!
3.4.2. 查看状态,提交修改
我们如果不确定自己的哪些文件被修改了,可以使用git status 命令,查看当前工作区的状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ve2kpaFb-1575802232651)(assets/1558508638807.png)]
可以清楚的看到:changes not staged for commit(修改没有被缓存,需要使用git add来进行添加操作)
我们使用git add 命令,添加到暂存区,然后再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjVv2PpI-1575802232651)(assets/1558508723334.png)]
这次提示: changes to be commited (修改需要被提交),我们使用git commit 进行提交后,再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBeXCWYN-1575802232651)(assets/1558508805559.png)]
提示说:工作区很干净,没有任何需要提交,搞定!
**3.4.3.**版本回退
现在,我们再次修改readme.txt,添加一行内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nSs73gj-1575802232652)(assets/1558509536049.png)]
然后提交到版本库:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byfI0XIt-1575802232652)(assets/1558509619213.png)]
**3.4.3.1.**日志查看
我们通过 git log 命令,可以查看历史的每次提交信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3U2byxu3-1575802232652)(assets/1558509701131.png)]
可以发现,目前为止,我们已经在本地仓库中提交了3次,也就是说有3个不同版本。其中,最近的这个版本有一个标示:HEAD ,这就是标记当前分支的当前版本所在位置。
本例当中,当前版本即 test version control这次提交,如果没有HEAD->MASTER,加上 --decorate查看,即git log --decorate。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XG1H4tmQ-1575802232654)(assets/1558509913326.png)]
另外,在log中,每一个版本的前面,都有一长串随即数字:2edf728e6fde09c9d33ce6dd96fd684ed09ebcc ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交。
3.4.3.2. 版本回退
现在,假设我们要回到上一级版本,该如何操作呢?
首先,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD**标示,上上一个版本就是**HEAD**,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100**。
如果要从 “test version control” 回退到 “modify readme file” ,我们可以使用 git reset --hard HEAD^ 命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8QZyCbW-1575802232654)(assets/1558510085695.png)]
提示说:HEAD 现在已经被设置到 35CEB36 的版本,即 modify readme file。
我们查看readme.txt:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncf8xm9a-1575802232654)(assets/20190522152948.gif)]
果然,版本已经回退了,最新添加的数据“test version control”已经没了。
此时再次查看日志,发现只剩下2次提交信息了,第三次提交的信息已经没了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvfWyNls-1575802232655)(assets/1558510370249.png)]
假如此时我后悔了,还想回到第3次提交的版本,怎么办?
3.4.3.3. 查看所有关联日志
我们可以通过git reflog命令,看到以前的每次执行动作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ch6rvqU7-1575802232655)(assets/1558510425025.png)]
其中红框内的部分,就是我们第三次提交的日志信息。前面的e498642 就是第三次提交的 commit id 的前几位数字。
我们可以通过指定commit id 的方式,来指定HEAD的位置:
指令:git reset --hard {commit id}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2vkNGAu-1575802232655)(assets/1558510522778.png)]
查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0kpioJuP-1575802232656)(assets/1558510546550.png)]
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3tAnW0P-1575802232656)(assets/20190522153652.gif)]
数据又回来了!
3.4.3.4. 总结
如果要进行版本回退或前进,一般分两步:
1) 通过git log 或 git reflog 查看操作日志,查找版本的commit id
2) 通过 git reset --hard 设置HEAD到指定版本
其实版本的回退,仅仅是修改HEAD指针的位置而已,因此Git进行版本的切换,比svn要快的多!
**3.4.4.**撤销修改
**3.4.4.1.**撤销工作区修改
现在我们在readme.txt中添加一行数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WO4t9kkO-1575802232656)(assets/1558511204590.png)]
在你提交前,你突然发现这个修改是有问题的,你打算恢复到原来的样子。怎么办?
如果修改的并不多,我们完全可以手动恢复到原始状态。但是如果改动比较大,手动处理就很容易有遗漏,而且很麻烦。怎么办?
查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nef1T2I5-1575802232657)(assets/1558511238828.png)]
Git提示我们,现在文件已经修改,等待被staged(暂存)。我们有两个选择:
1) 可以使用git add 来添加到暂存区,接着去提交文件
2) 可以使git checkout – 来撤销修改
所以,这里我们选择第二种方案后,再次查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wl3avEOz-1575802232657)(assets/1558511358298.png)]
工作区是干净的!修改已经被撤销了!
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lz1koSg-1575802232658)(assets/1558511398936.png)]
**3.4.4.2.**撤销staged修改
刚才的案例中,我们修改了数据,并没有add带暂存区,处理起来还算简单。如果我们已经吧数据add 到了暂存区,又该如何处理呢?
我们首先添加一行数据到readme.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-boqbWCjw-1575802232658)(assets/1558511617500.png)]
并且添加到staged(暂存区),然后查看状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31vFrHEL-1575802232658)(assets/1558511646760.png)]
有一个修改等待被提交,并且有一行提示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Upuz9s4-1575802232659)(assets/1558511681342.png)]
可以使用 git reset HEAD 来撤销缓存修改。
我们前面说过,git reset 命令可以进行版本回退,此处reset 指定的是HEAD ,而不是其他版本,因此就有撤销缓存修改的作用:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onjgfbLt-1575802232659)(assets/1558511813059.png)]
查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2FSQMRK-1575802232659)(assets/1558511826077.png)]
发现文件的修改被撤回到了工作区,尚未添加到staged(暂存区),我们再次执行git checkout – 即可撤销工作区修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BG90H322-1575802232660)(assets/1558511863971.png)]
工作区干净了!
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zpNJqylV-1575802232660)(assets/1558511879440.png)]
文件也恢复了原来的状态,整个世界都清净了!
**3.4.4.3.**总结
撤销修改分两种情况:
1) 撤销工作区修改,使用git checkout –
2) 撤销暂存区修改,分两步:
a) 使用**git reset HEAD **来撤销暂存区修改。
b) 使用git checkout **-- **来撤销工作区修改
4. 远程仓库
到目前为止,我们已经学会了如何在本机利用git进行文件版本管理,但是如果要想进行多人协作,我们就必须使用远程仓库。将本地仓库的数据同步到远程仓库,实现多人协作开发。
目前比较热门的代码托管社区:GitHub,网址:https://gtihub.com ,提供了免费的远程git仓库功能。不过网速不是特别流畅。 在国内,有很多的公司使用oschina提供的git服务:码云, https://gitee.com ,当然,我们也可以自己来搭建远程仓库。目前学校服务器中搭建了一个git私服,其地址为:http://192.168.50.33:10080
4.1. 访问远程仓库
4.1.1. 注册并登录
访问:http://192.168.50.33:10080
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rkzHbZXE-1575802232660)(assets/1558512621584.png)]
大家自己注册并登录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3k2HhENY-1575802232661)(assets/1558512723739.png)]
4.1.2. 创建新的仓库
在页面左侧,选择创建新的仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X1kriEgR-1575802232661)(assets/1558512794136.png)]
填写仓库信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lNrjbfn-1575802232662)(assets/1558512927215.png)]
仓库创建完毕,可以看到,如果我们要与远程仓库同步,这里支持两种不同的通信协议,ssh和http。当我们选中一种协议后,后面会出现对应的远程仓库地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vI66yTj5-1575802232662)(assets/1560757334683.png)]
在企业中一般使用HTTP协议的仓库地址,因为简单,而且都是公司内网,也很安全。
要使用SSH协议进行同步,你就必须生成SSH密钥,并添加到当前仓库的许可列表中,比较繁琐。作为开发人员我们不需关注这个协议,重点是使用git工具进行代码的远程操作。
**4.1.3. **推送远程仓库
通过控制面板,回到仓库页面,发现下面有一段帮助信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nboMj1Kx-1575802232663)(assets/1560757528300.png)]
关联远程仓库:
git remote add origin http://192.168.154.133:3000/fangqyou/git-hello.git
需要注意的是:git remote add origin 后面紧跟的,其实是上面的仓库地址信息
推送本地仓库到远程仓库的master分支:
git push -u origin master
上面命令将本地的master
分支推送到origin
主机,同时指定origin
为默认主机,后面就可以不加任何参数使用git push
了。不带任何参数的git push
,默认只推送当前分支,这叫做simple
方式。
执行命令,发现有提示信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nz7nhmV8-1575802232663)(assets/1560758020477.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GoFjrrLC-1575802232663)(assets/1560758040604.png)]
推送成功!此时登录远程仓库,刷新页面,可以看到数据已经推送,并且与本地仓库完全一致:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vx99Tnir-1575802232664)(assets/1560757992875.png)]
从现在起,只要本地作了提交,就可以通过命令:
git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
4.1.4. 克隆远程仓库
现在,假设一个新的成员要加入我们的开发队伍,那他首先要做的第一件事情,一定是从远程仓库获取所有代码。此时就可以使用克隆动作。
克隆远程仓库:就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。
我们随意找到一个目录D:testworld:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omVEqBxQ-1575802232664)(assets/1558515192783.png)]
打开控制台,输入命令:git clone 远程仓库地址
远程仓库地址可以在仓库页看到:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDni9BlM-1575802232665)(assets/1560758095024.png)]
输入命令:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaOWbicU-1575802232665)(assets/1560758394970.png)]
查看目录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTZotQPM-1575802232665)(assets/1560758462938.png)]
查看状态:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IbNgQ9lD-1575802232666)(assets/1560758502988.png)]
OK,你已经与远程仓库完全一致了,开始你的工作吧!
4.1.5. 拉取远程仓库数据
现在如果有人也向远程仓库推送了代码,那么当我们就需要拉取 远程仓库的最新代码到本地:
我们可以先手动修改远程仓库数据,模拟他人的提交:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1TypQX4-1575802232666)(assets/1560758684531.png)]
在本地拉取最新代码,使用git pull 命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rdwdD7xx-1575802232667)(assets/1560758727534.png)]
查看readme文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4WBOTFK-1575802232667)(assets/1560758760279.png)]
内容已经与远端保持一致。
4.2. 总结
注意:
1) 如果要使用SSH协议与远程仓库同步,就必须先在本地生成公钥和私钥,然后将公钥添加到远程的SSH列表
2) 如果已经有本地仓库,并且想要与远程仓库关联,一般需要两步:
a) 通过git remote add origin + 远程仓库地址 进行关联
b) 通过git push -u origin master推送本地仓库修改到远程仓库
3)如果没有本地仓库,先创建远程仓库,然后通过git clone + 远程仓库地址 进行克隆并创建本地仓库
4)通过git pull 拉取远程仓库的最新内容到本地仓库
5. 分支管理
5.1. 分支有什么用
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险.
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
5.2. Git的分支管理原理
我们的每次提交,都对应一个具体的时间点,git会把这许多的时间点串起来,就形成了一条时间线,这条时间线就是一个分支。Git中默认的分支就是主分支,叫master。
我们查看当前的提交日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGSeZaAc-1575802232667)(assets/1558519175005.png)]
发现总共有3次提交,这3次提交可以串起来成一条时间线,就是master分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bu52Iyc1-1575802232668)(assets/1558519215148.png)]
每次提交,master分支都会新增一个时间点,分支线也不断变长。
当我们创建新的分支,例如dev分支。Git会创建一个新的指针,叫做dev,指向跟master相同的时间点(提交点),这样分支就创建好了,你的工作区无需任何改变,创建分支的速度非常的快。
而要切换分支,只需要把HEAD指向dev即可,所以你的分支实现了光速切换!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i0ZTjDpc-1575802232668)(assets/1558519336315.png)]
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCQF76b4-1575802232668)(assets/1558519358799.png)]
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPnnzPVh-1575802232669)(assets/1558519371070.png)]
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGQ9ECpR-1575802232669)(assets/1558519383745.png)]
你会发现Git的分支管理,基本就是创建新的指针,改变HEAD指向,删除指针等操作,几乎没有文件的增删。所以速度非常快!
5.3. 分支的创建和合并
5.3.1. 创建分支
我们可以使用 git checkout -b 分支名 来创建并切换到新的分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9ZVjlYn-1575802232670)(assets/1558580401859.png)]
你会注意到我们已经切换到了dev分支。 git checkout 加上 -b 参数,就等同于创建分支,并切换分支。相当于以下两条命令:
git branch dev # 创建分支
git checkout dev # 切换到具体分支
使用git branch 查看所有分支,当前分支前面会有一个*表示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtkHc4ud-1575802232670)(assets/1558580451682.png)]
然后我们可以在dev分支上进行修改和提交。例如我们在readme.txt上添加一行文字:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9r4CRxfM-1575802232670)(assets/1558580508100.png)]
提交修改:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tdJcshsj-1575802232671)(assets/1558580565408.png)]
此时,dev分支已经比master领先了一次提交,并且HEAD指向的是dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpSgcmlE-1575802232671)(assets/1558580646859.png)]
5.3.2. 合并分支
我们使用git checkout master切换回master分支,查看内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vcZPA5Xa-1575802232672)(assets/1558580731092.png)]
发现readme并没有改变,因为刚才修改的是dev分支。此时的HEAD已经指向了master了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtEUX6RL-1575802232672)(assets/1558580759923.png)]
我们使用git merge dev命令将 dev分支的修改合并到master分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcdIgugA-1575802232673)(assets/1558580858996.png)]
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
5.3.3. 删除分支
合并完成后,就可以放心地删除dev分支了,可以使用git branch -d dev 命令删除dev分支,dev就是具体的分支名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swsk1Ra8-1575802232673)(assets/1558581059628.png)]
再次查看分支列表:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0V0zcrY-1575802232674)(assets/1558581082976.png)]
5.3.4. 总结
1) 使用git branch 分支名 创建分支
2) 使用git checkout 分支名 来切换分支
3) 也可以使用 git checkout -b 分支名 来完成 创建并切换分支的操作
4) 使用git merge 分支名 来合并分支到当前分支
5) 使用git branch -d 分支名 来删除指定分支,注意:要删除一个未合并的分支。需要使用**-D**参数进行强制删除
5.4. 解决冲突
5.4.1. 制造冲突
现在我们新建一个分支:dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtBKMVtK-1575802232674)(assets/1558581430626.png)]
然后修改readme.txt:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OuN91rKR-1575802232674)(assets/1558581416934.png)]
将dev的修改提交:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wxyoun7L-1575802232675)(assets/1558581482807.png)]
切换到master分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGwxVUsc-1575802232675)(assets/1558581536533.png)]
并且在readme.txt最后添加内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZyGslgmi-1575802232676)(assets/1558581566401.png)]
提交数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EqOHV0p2-1575802232676)(assets/1558581605219.png)]
现在,master和dev都有了各自新的提交,变成了这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97PitunO-1575802232676)(assets/1558581618270.png)]
5.4.2. 解决冲突
这种情况下,是无法进行快速合并的。我们试一下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dsKWGUll-1575802232677)(assets/1558581779956.png)]
自动合并失败,必须先解决文件冲突,才能提交。
此时查看readme.txt文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yx9vY4Ez-1575802232677)(assets/1558581802995.png)]
我们可以根据实际情况进行冲突解决,比如两者都保留:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMM2qr9Y-1575802232678)(assets/1558581832727.png)]
然后再次提交:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cizcUlg3-1575802232678)(assets/1558581890857.png)]
工作区就干净了。此时master和dev分支线就变成了这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nco2oXWm-1575802232678)(assets/1560737439112.png)]
可以用git log --graph --decorate --pretty=oneline --abbrev-commit命令来查看:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Y3A7Swo-1575802232679)(assets/1558582108527.png)]
接下来就可以删除dev分支了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqVQcNri-1575802232679)(assets/1558582167145.png)]
6. 客户端工具TortoiseGit
现在Git的客户端工具非常多,比较流行的例如:TortoiseGit(在svn中俗称小乌龟)、SourceTree。
SourceTree的注册需要科学上网。因此这里就不做讲解了。
6.1 安装
详见安装文档
6.2. 基本使用
6.2.1. 创建本地仓库
我们新建一个空的文件夹:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mxr0xUq8-1575802232681)(assets/1558592528260.png)]
然后进入tortoise目录,右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IjuyCgnP-1575802232682)(assets/1558592565276.png)]
弹出提示,不要勾选:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGa25LRO-1575802232682)(assets/1558592639043.png)]
查看目录,发现生成.git文件夹:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IRu482jV-1575802232682)(assets/1558592678483.png)]
6.2.2. 添加文件并提交
创建新的文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZzboANpj-1575802232683)(assets/1558592753116.png)]
编写内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zLayGHLA-1575802232684)(assets/1558592771988.png)]
在文件夹中右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ndi29Ec-1575802232684)(assets/1558592822803.png)]
提示:这一步等同于我们的 git add readme.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prtWOZNm-1575802232685)(assets/1558592861205.png)]
此时直接点击提交,即可完成:git commit 操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vslXtE1D-1575802232685)(assets/1558592963373.png)]
提示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Sidxjig-1575802232686)(assets/1558592990530.png)]
6.2.3. 管理修改
6.2.3.1. 差异对比
修改readme.txt:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbI7nF26-1575802232686)(assets/1558593075417.png)]
右键操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1z6xaQE-1575802232687)(assets/1558593202576.png)]
结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-URVsRasB-1575802232687)(assets/1558593362149.png)]
6.2.3.2. 提交修改
直接在文件上选择右键,提交即可(只要add过一次,后续不用add操作,直接提交):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rdhTfFTd-1575802232688)(assets/1558593511660.png)]
6.2.3.3. 查看提交日志
选中文件,右键菜单中,选中查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdKLj1J3-1575802232688)(assets/1558593624516.png)]
提交的日志信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNxJ3UcG-1575802232689)(assets/1558593671411.png)]
6.2.3.4. 版本回退
现在我们再次修改readme.txt,并且提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUZB1rp3-1575802232690)(assets/1558593776850.png)]
查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-reHFYZYL-1575802232690)(assets/1558593861257.png)]
假如我们要回到上一个版本,也就是第2次提交。
我们选中第2次提交,然后右键,选中:重置"master"到这个版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0R2nb34-1575802232691)(assets/1558593932166.png)]
弹出菜单,这里选中Hard模式,然后确定:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9Hw3vPj-1575802232691)(assets/1558594000175.png)]
再次查看日志,只剩下第1和第2次提交了。并且HEAD已经设置到了第2次提交位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Te5ABg7-1575802232692)(assets/1558594037600.png)]
文件也回滚了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VldYzCyx-1575802232692)(assets/1558594058092.png)]
如果我现在后悔了,想再次回到第3次提交怎么办?现在连日志都没有了!
此时,在空白处点击右键,选中 显示引用记录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLBUFOHa-1575802232693)(assets/1558594171414.png)]
弹出所有操作的日志信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vB32bYnC-1575802232694)(assets/1558594122860.png)]
现在,我们找到第3次提交,右键,选中:重置“master”到这个版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yZdQIkRo-1575802232694)(assets/1558594279737.png)]
结果,第3次提交又回来了!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHin4en1-1575802232695)(assets/1558594354271.png)]
文件内容回来了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9jnwoyW-1575802232695)(assets/1558594375878.png)]
6.2.3.5. 撤销修改
我们现在修改文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1o6WKMsb-1575802232696)(assets/1558594582640.png)]
现在后悔了,想要还原到修改以前。
我们可以选中文件,右键。然后选中菜单:还原。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxPE3JKz-1575802232696)(assets/1558594635822.png)]
点击确定:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9BFzc8Df-1575802232697)(assets/1558594674808.png)]
还原成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-05YUkgfz-1575802232697)(assets/1558594689322.png)]
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-php8tOTp-1575802232698)(assets/1558594708387.png)]
6.3. 访问远程仓库
我们创建一个新的仓库:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27ZdiSqF-1575802232698)(assets/1558595967463.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfNUsSjk-1575802232699)(assets/1560762961269.png)]
6.3.1. 设置访问账号
由于安装时,我们并没有设定SSH信息,因此默认tortoise默认使用的ssh工具是“PuTTY”。
然而,git Bash使用的ssh工具是“openSSH”,如果想让TortoiseGit也使用刚才生成的密钥可以做如下配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRCZAfp8-1575802232699)(assets/1558596062590.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pu6ee2hl-1575802232700)(assets/1560763262212.png)]
6.3.2. 关联远程仓库****
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AklnarQL-1575802232700)(assets/1560763387936.png)]
这里的四个选项:
1) 远端仓库名称,一般叫origin
2) URL:远程仓库地址 http://192.168.154.133:3000/fangqyou/tortoiseGit.git
3) 推送URL:同上 http://192.168.154.133:3000/fangqyou/tortoiseGit.git(可选)
4) Putty密钥:http协议无需设置
6.3.3. 推送本地仓库
在空白处点右键,选择 “Git****同步”:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HgpI4A8g-1575802232701)(assets/1558596608852.png)]
弹出菜单中,选择将master推送到远程仓库的master:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fuaXa2v6-1575802232701)(assets/1558596677373.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzhSPNvX-1575802232702)(assets/1558596701389.png)]
成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTRTSil0-1575802232702)(assets/1558596810775.png)]
私服中也显示了最新的信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CjJUb2Iq-1575802232703)(assets/1560763555015.png)]
6.3.4. 从远程仓库拉取
现在,我们先在远程仓库修改数据:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N00VsY9C-1575802232703)(assets/1558597278350.png)]
然后在本地的tortise文件夹点击右键,菜单中选择:拉取:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ithJ2s6u-1575802232704)(assets/1558597346960.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bq1UDeYe-1575802232704)(assets/1558597435678.png)]
成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrVLbazC-1575802232705)(assets/1558597470140.png)]
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xPRzftCC-1575802232705)(assets/1558597489064.png)]
6.4. 分支管理
6.4.1. 创建分支
在文件夹的空白处点击右键。选择创建分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IC7g3ps-1575802232706)(assets/1558597622729.png)]
填写分支名称和说明:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeJEIooW-1575802232706)(assets/1558597690233.png)]
查看日志,发现已经有了dev分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-If2Ywalh-1575802232707)(assets/1558597738791.png)]
6.4.2. 切换分支
在空白处选择右键,菜单中选择: 切换/检出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B29ObTWx-1575802232707)(assets/1558597849271.png)]
选择要切换的分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ZX7sXEr-1575802232708)(assets/1558597901027.png)]
在dev分支中。修改readme文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-682r93AA-1575802232708)(assets/1558597931112.png)]
提交修改。
然后切换到master:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtS6vENc-1575802232709)(assets/1558597995284.png)]
查看文件内容,发现并没有变化,因为刚才的修改是在dev完成的。master没有影响。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vGA43qU5-1575802232709)(assets/1558598031380.png)]
6.4.3. 合并分支
空白处点击右键,选择合并菜单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPulfN7V-1575802232710)(assets/1558598105831.png)]
选择将dev合并当当前分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2GvTXl6-1575802232710)(assets/1558598187615.png)]
成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mraaeKqj-1575802232711)(assets/1558598210526.png)]
查看内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v77cxAUQ-1575802232711)(assets/1558598227450.png)]
6.4.4. 解决冲突
切换到dev,然后进行修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tTcbpJDR-1575802232712)(assets/1558598499689.png)]
提交数据。
切换到master,修改readme:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0znFA0OC-1575802232712)(assets/1558598467861.png)]
然后提交修改
尝试用master合并dev:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XAziGFB-1575802232712)(assets/1558598445329.png)]
结果失败了,因为有冲突:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppZqELcm-1575802232713)(assets/1558598421774.png)]
查看文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UtdI7k8-1575802232714)(assets/1558598526396.png)]
手动解决:根据需求去处理。这里我们假设两者都保留:
标记为解决:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgYKXH2j-1575802232714)(assets/1558598595408.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HfTUDpFE-1575802232715)(assets/1558598627526.png)]
解决完成,直接提交:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERIrx36r-1575802232715)(assets/1558598656837.png)]
提示信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFY2ju3g-1575802232715)(assets/1558598754627.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKqQwqbD-1575802232716)(assets/1558598801874.png)]
提交成功!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4kF1Dc3-1575802232716)(assets/1558598830205.png)]
查看日志:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwQofY3z-1575802232717)(assets/1558598873830.png)]
7. 将Java工程加入到版本库(了解)
现在,我们有一个准备好的maven项目,一个用户管理系统:itheima_ssm
我们要吧这个项目交给git去管理。
7.1. 初始化本地仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-in5N6oiQ-1575802232717)(assets/1558599835152.png)]
7.2. 忽略文件和目录
将不需要管理的文件和目录忽略,maven项目中需要提交的只有src和pom.xml,其它文件和目录都应该忽略:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCzittsS-1575802232718)(assets/1558599942555.png)]
选择递归忽略:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oulIymqH-1575802232718)(assets/1558599979839.png)]
同样的方式处理target目录等其他需要忽略的文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRmUcJ1j-1575802232718)(assets/1558600074099.png)]
大家会注意到,在本地仓库目录,多出了一个.gitignore文件,这里面就定义了所有的过略规则:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGM6lyTm-1575802232719)(assets/1558600126515.png)]
7.3. 所有文件添加到暂存区
方式1:使用git bash 。 敲击命令: git add . 就会把当前目录所有文件加入暂存区
方式2:使用tortoise:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fd6K19oA-1575802232719)(assets/1558600281196.png)]
你会发现,待添加的文件,只有src目录下的和pom.xml,当然还有那个.gitignore文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7iuVb71o-1575802232719)(assets/1558600349623.png)]
成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SZ9BjCYc-1575802232720)(assets/1558600372729.png)]
7.4. 提交
然后提交即可:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVgGziH8-1575802232720)(assets/1558600448246.png)]
成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJNFU6Lh-1575802232720)(assets/1558600469767.png)]
有必要的话,推送到远程
8. Idea客户端
8.1 在Idea中配置Git
打开File菜单:
在File --> Setting->Version Control --> Git -->Path to Git executable选择你的git安装后的git.exe文件
打开Setting:
方式一:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1AGjYXru-1575802232721)(assets/1558600705697.png)]
方式二:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQrBKTap-1575802232721)(assets/1558600784622.png)]
配置本地安装的Git的git.ext文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVvKsAsU-1575802232722)(assets/1558600996379.png)]
然后点击Test,测试是否设置成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHe8y4yv-1575802232722)(assets/1558601030841.png)]
8.2. 创建工程
我们新建一个maven工程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OxPa53vg-1575802232722)(assets/1558601130934.png)]
编写简单的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QY74H8nq-1575802232723)(assets/1558601259339.png)]
8.3. 将项目创建为本地仓库
打开VCS菜单
VCS --> Import into Version Control --> Create Git Repository
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdIOfV7M-1575802232723)(assets/1558601386492.png)]
在弹框中选中项目所在的位置,点击OK。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TyCxLXS-1575802232723)(assets/1558601436747.png)]
此时项目文件全部变成棕色。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHjwvsTe-1575802232724)(assets/1558601489537.png)]
项目Git版本已经创建成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7BOZZhh-1575802232724)(assets/1558601582216.png)]
8.4. 忽略文件
安装ignore插件,在file->settings->plugin搜索.ignore,点击Install,安装完成后就可以愉快的使用了,记得重启IDEA。
可以手动创建和修改.gitignore文件,也可以通过插件过滤。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVjtVE7H-1575802232725)(assets/1560772974937.png)]
然后将需要忽略的文件右键添加到忽略文件中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO6Eb6ID-1575802232725)(assets/1560773173265.png)]
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。输入:
git rm -r --cached filePath
git commit -m “remove xx”
-r 是删除文件夹及其子目录 –cached 是删除暂存区里的文件而不删除工作区里的文件
8.5. 提交代码(重点)
8.5.1. 添加到暂存区
项目右键选择Git --> add
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6tZCt4TU-1575802232725)(assets/1558601700392.png)]
此时项目文件全部变成绿色,此时文件只是处于暂存区,并没有真正进入到版本库中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NW8L1k5t-1575802232726)(assets/1558601751484.png)]
8.5.2. 提交到本地仓库
项目右键Git–> Commit Directory
在弹窗中输入Commit Message,点击commit,此时项目文件从暂存区真正进入版本库中,项目文件变成黑色。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZGPg6xz-1575802232726)(assets/1558601862253.png)]
编辑本次提交备注信息,然后点击commit按钮。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gk0f8wrF-1575802232726)(assets/1558601933904.png)]
此时项目文件全部变成黑色:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEIAGkDP-1575802232727)(assets/1558602003501.png)]
8.6. 提交远程仓库(重点)
8.6.1. 新建一个远程仓库
在远程仓库创建新项目:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxHAETLk-1575802232727)(assets/1558602562572.png)]
记录地址:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4QPuFd4p-1575802232727)(assets/1558602612810.png)]
8.6.2. 推送到远程仓库
右键选择项目—> Git ->Repository -> Push ,然后填写远程仓库地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z5kQ3XWT-1575802232728)(assets/1558602680165.png)]
复制远程仓库的地址,并填写:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ku783Jfp-1575802232728)(assets/1558602868174.png)]
点击Push, 推送成功, 在Idea右下角弹出提示框:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pzp89m2T-1575802232728)(assets/1558602958666.png)]
查看远程仓库,推送成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eO4hfzSd-1575802232729)(assets/1558604939194.png)]
8.6.3. 拉取数据
在远程仓库随意修改代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1y7zyMq5-1575802232729)(assets/1558606665811.png)]
在项目中,拉取代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWh7uL5s-1575802232729)(assets/1558606732594.png)]
点击Pull:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XTMYt8V-1575802232730)(assets/1558606777250.png)]
代码成功同步:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sFtCVvsG-1575802232730)(assets/1558606829506.png)]
8.7. 克隆项目(重点)
8.7.1. 删除本地项目
Settings->Version Control
1)断开idea与Git版本仓库的联接:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Ij2agV3-1575802232731)(assets/1558616310549.png)]
- 从Idea和本地文件目录中删除项目。
8.7.2. 克隆远程仓库并导入Idea
打开Idea,点击 Check out form Version Control,选中Git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1iOb4PgG-1575802232731)(assets/1558616620194.png)]
填入远程仓库SSH地址,输入你的远程仓库地址,点击Test,测试一下地址是否正确。
点击Clone
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cClMGCt5-1575802232731)(assets/1558616754907.png)]
点击YES:
Clone出远程仓储的工程,并且导入到idea中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cLxyTS8-1575802232732)(assets/1558616869115.png)]
导入成功:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9okdLpNO-1575802232732)(assets/1558616978769.png)]
右键Git,可以与远程仓库进行push和pull代码操作了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heAXoftK-1575802232732)(assets/1558617012330.png)]
8.8. 解决冲突(重点)
8.8.1. 制造冲突
1)我们创建新的分支dev,并且在dev修改提交代码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnhOiJGS-1575802232733)(assets/1558617175235.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwPaZhUI-1575802232733)(assets/1558617214434.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36nDxMWw-1575802232734)(assets/1558617251157.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-assK9NAs-1575802232734)(assets/1558617289540.png)]
2)然后在master修改提交代码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZqddXhu-1575802232734)(assets/1558617344414.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N68fBhxE-1575802232735)(assets/1558617366477.png)]
接下来尝试合并dev分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dQ9Js88-1575802232735)(assets/1558617434755.png)]
选择要合并的分支:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fp35JqM7-1575802232735)(assets/1558617479442.png)]
发现合并失败,此时文件有红色标记
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKCYjB2q-1575802232736)(assets/1558617554637.png)]
8.8.2. 解决冲突
点击Merge合并策略**
Accept Yours:保留你自己的代码,
Accept Theirs:保留别人的,
merge:人工合并 (人工把需要的代码复制粘贴到结果集result里面比较保险)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JY60OnDa-1575802232736)(assets/1558617859908.png)]
弹出一个对比页面:
在Result中,手动合并完成后,点击Apply按钮,完成冲突代码合并。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItYcZ0kt-1575802232736)(assets/1558617657519.png)]
此时文件的红色标记没了:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JyWp2BdN-1575802232739)(assets/1558617712569.png)]
但是有未提交的蓝色标记。然后提交,文件变为黑色。冲突被解决! [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7jqfStD8-1575802232740)(assets/1558617775114.png)]
731)]
填入远程仓库SSH地址,输入你的远程仓库地址,点击Test,测试一下地址是否正确。
点击Clone
[外链图片转存中…(img-cClMGCt5-1575802232731)]
点击YES:
Clone出远程仓储的工程,并且导入到idea中。
[外链图片转存中…(img-8cLxyTS8-1575802232732)]
导入成功:
[外链图片转存中…(img-9okdLpNO-1575802232732)]
右键Git,可以与远程仓库进行push和pull代码操作了。
[外链图片转存中…(img-heAXoftK-1575802232732)]
8.8. 解决冲突(重点)
8.8.1. 制造冲突
1)我们创建新的分支dev,并且在dev修改提交代码。
[外链图片转存中…(img-SnhOiJGS-1575802232733)]
[外链图片转存中…(img-SwPaZhUI-1575802232733)]
[外链图片转存中…(img-36nDxMWw-1575802232734)]
[外链图片转存中…(img-assK9NAs-1575802232734)]
2)然后在master修改提交代码。
[外链图片转存中…(img-iZqddXhu-1575802232734)]
[外链图片转存中…(img-N68fBhxE-1575802232735)]
接下来尝试合并dev分支:
[外链图片转存中…(img-1dQ9Js88-1575802232735)]
选择要合并的分支:
[外链图片转存中…(img-fp35JqM7-1575802232735)]
发现合并失败,此时文件有红色标记
[外链图片转存中…(img-sKCYjB2q-1575802232736)]
8.8.2. 解决冲突
点击Merge合并策略**
Accept Yours:保留你自己的代码,
Accept Theirs:保留别人的,
merge:人工合并 (人工把需要的代码复制粘贴到结果集result里面比较保险)
[外链图片转存中…(img-JY60OnDa-1575802232736)]
弹出一个对比页面:
在Result中,手动合并完成后,点击Apply按钮,完成冲突代码合并。
[外链图片转存中…(img-ItYcZ0kt-1575802232736)]
此时文件的红色标记没了:
[外链图片转存中…(img-JyWp2BdN-1575802232739)]
但是有未提交的蓝色标记。然后提交,文件变为黑色。冲突被解决! [外链图片转存中…(img-7jqfStD8-1575802232740)]
最后
以上就是热心嚓茶为你收集整理的git_http1. Git简介2. Git安装3. Git的基本使用4. 远程仓库5. 分支管理6. 客户端工具TortoiseGit7. 将Java工程加入到版本库(了解)8. Idea客户端的全部内容,希望文章能够帮你解决git_http1. Git简介2. Git安装3. Git的基本使用4. 远程仓库5. 分支管理6. 客户端工具TortoiseGit7. 将Java工程加入到版本库(了解)8. Idea客户端所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复