本文章基于b站:BV1RK4y1g7A5 赵珊珊老师的java课程的学习加以个人理解做出的学习笔记整理。(p503-p538)
目录
版本控制系统的分类
集中化的版本控制系统
集中化的版本控制系统诸如CVS,SVN以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来这已成为版本控制系统的标准做法,这种做法带来了许多
优点:现在每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统要远比在各个客户端上维护本地数据库来得轻松容易。
缺点:这么做最显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式的版本控制系统
由于上面集中化版本控制系统的那些缺点,于是分布式版本控制系统面世了。
在这类系统中,像Git, BitKeeper等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。这样,你就可以在同一个项目中分别们和不同工作小组的人相互协作。
分布式的版本控制系统在管理项目时存放的不是项目版本与版本之间的差异.它存的是索引(所需磁盘空间很少所以每个客户端都可以放下整个项目的历史记录)
Git本地结构
【工作区】—git add→【暂存区】—git commit→【本地库】
代码托管中心_本地库和远程库的交互方式
【1】代码托管中心是干嘛的呢?
我们已经有了本地库,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?它的任务是帮我们维护远程库,
下面说一下本地库和远程库的交互方式,也分为两种:(1)团队内部协作
(2)跨团队协作
【2】托管中心种类:
局域网环境下:可以搭建GitLab服务器作为代码托管中心,GitLab可以自己去搭建
外网环境下:可以由GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建
Git初始化仓库
【1】查看git安装版本
git --version
【2】清屏
clear
【3】设置签名:设置用户名和邮箱
git config --global user.name "×××"
git config --global user.email "××@××.com"
【4】本地仓库初始化
git init
Git命令
【工作区】—git add→【暂存区】—git commit→【本地库】
【1】add和commit命令
①git add demo.txt
②git commit -m "-m添加注释" demo.txt
注意:(1)不放在本地仓库中的文件,git是不进行管理。
(2)即使放在本地仓库的文件,git也不管理,必须通过add,commit命令操作才可以将内容提交到本地库。
【2】status命令看的是工作区和暂存区的状态
【3】log命令
查看提交的,显示从最近到最远的日志
注:日志过多(尾页显示END):·下一页:空格;·上一页:b;退出:q;
【4】日志显示方式
(1)git log
(2)git log --pretty=oneline
(3)git log --oneline
(4)git reflog多了信息:HEAD@{数字} 这个数字的含义:指针回到当前这个历史版本需要走多少步
【5】reset命令;前进或者后退历史版本,最近的索引可以用HEAD
(1)git reset --hard ×××(版本索引,鼠标选中[默认复制],右键粘贴)
本地库的指针移动的同时,重置暂存区,重置工作区
(2)git reset --mixed ×××
本地库的指针移动的同时,重置暂存区,但是工作区不动
(3)git reset --soft ×××
本地库的指针移动的时候,暂存区,工作区都不动
【6】rm删除工作区的文件
①rm demo.txt //删除工作区的
②git add demo.txt //将删除操作同步到暂存区
③git commit -m "将删除操作同步的本地库" demo.txt
④git reflog //删除的版本索引都还在,可以通过reset --hard跳转,恢复删除的文件
【7】diff命令
文件内容比较(一行一行的)
git diff demo.txt //工作区与暂存区比较
git diff HEAD(版本号) demo.txt //本地库与暂存区比较
分支
【1】什么是分支:
在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。【2】分支的好处:
同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率。
如果有一个分支功能开发失败,直接删除这个分支就可以了,不会对其他分支产生任何影响。
【3】分支常用命令:
(1)git branch -v //查看分支
(2)git branch branch01 //创建分支branch01;再查看后,通过*标识当前所在分支
(3)git checkout branch01 //切换分支
【4】冲突问题
(0)cat demo.txt //查看文本内容
(1)git merge branch01 //先切换到master,再执行合并命令,之后进入合并状态(master|MERGING)
(2)出现冲突:
(3)人为修改冲突文件后,重新git add Test4.txt
(4)git commit -m "解决了冲突" //git commit 不可以加上文件名
Git与GitHub
【0】流程
【1】别名
(1) git remote -v //查看别名
(2) git remote add origin(别名) [远程库地址] //添加别名
【2】推送
git push origin master
【3】克隆
克隆操作可以帮我们完成:
(1)初始化本地库
(2)将远程库内容完整的克隆到本地(3)替我们创建远程库的别名
【4】push操作
(1)远程库设置,加入团队
(2)git push origin master
【5】拉取操作①fetch+merge
(1)git fetch origin master //origin:远程库别名,master:远程库对应的分支
在抓取操作执行后,只是将远程库的内容下载到本地,但是工作区中的文件并没有更新。工作区中还是原先的内容。
(2)git checkout origin/master //抓取后先去远程库查看内容是否正确。用ll(小写L)查看文件目录
(3)git checkout master //先切回master分支,在合并
(4)git merge origin/master
②pull
git pull origin master
ssh连接
【1】进入用户的主目录中
cd ~
【2】执行命令,生产一个.ssh的目录
ssh-keygen -t rsa -C ×××@×××.com
keygen --- > key generation
注意:C要大写
后面的邮箱,是你的github注册的账号的时候对应的邮箱三次回车确认默认值即可
【3】打开.pub文件,复制里面内容C:\Users\用户名\.ssh
【4】将【3】中复制的内容粘贴到GitHub
GitHub的Settings→SSH and GPG keys→New SSH key→title随便取名,粘贴到Key
IDEA2021集成Git
【1】设置→版本控制→Git→选择安装路径中的git.exe(下左图)
【2】初始化,VCS→创建Git仓库(上右图)
【3】右键 git和commit操作
注:
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories 告诉git 允许不相关历史合并。
假如我们的源是origin,分支是master,那么我们需要这样写git pull origin master --allow-unrelated-histories
这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的commit出现的无法提交。如果使用本文的方法还无法提交,需要看一下是不是发生了冲突,解决冲突再提交
push推送:git push -u origin master -f【4】从远程库克隆到本地