1.版本控制概述
版本控制:维护工程蓝图的一种做法,即,记录从项目立项到销毁,所有文件的更新迭代过程
2.版本控制系统(软件)分类
版本控制系统分两种:
- 集中式版本控制系统:统一集中管理控制,只有集中式服务器,如SVN
- 分布式版本控制系统:每一个个体都可作为服务器,并且有伪集中式服务器,如Git
集中式版本控制系统优势:
①管理方便,逻辑明确,操作简单
②易于管理,集中式服务器更能保证安全性
③代码一致性非常高
④有良好的目录级权限控制系统
劣势:
①对服务器性能要求高,数据库容量经常暴增,体量大
②必须联网。如果不能连接到服务器上,基本上不可以工作,如果服务器不能连接上,就不能提交,还原,对比等等
③不适合开源开发
④分支的管控方式不灵活
分布式版本控制系统优势:
①适合分布式开发,每一个个体都可以作为服务器
②公共服务器压力和数据量较小
③速度快、灵活,分支之间可以任意切换
④容易的解决代码冲突
⑤离线工作,不影响本地代码编写
3.分布式版本控制之分支概述
Git 的分支模型称为它的必杀技,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。
那什么是分支呢?分支就是同一项目所在的不同独立环境,也就是说,一个项目有多个分支。同一项目的开发者A有一个或多个分支,开发者B同样有一个或多个分支,这些分支合并之后就是一个另一个分支。
而分支又有一个主分支和一个或多个子分支,项目在开发过程中,主分支负责集成所有子分支的开发细节。
4.Git的工作流程
Git的处理流程涉及Workspace工作区、Index/Stage暂存区、Repository版本库/本地仓库、Remote远程仓库四大核心区域。
- Workspace工作区:存放项目代码的地方(一般不在idea或其他开发工具的workspace中建立,而是新建一个文件夹)
- Index/Stage暂存区:一个文件,用于临时存放项目改动的内容和信息(也即工作区add的数据)
- Repository版本库:一个文件夹(.git文件夹),存放了所有版本的数据(也即暂存区commit的数据)
- Remote远程仓库:托管代码的服务器(如公司的一个集成项目)
大致流程:
工作区— git add—> 暂存区 —git commit—> 版本库 —git push—> 远程仓库
远程仓库 —git pull—>版本库
2、Git的基本命令
git status //查看版本库状态
git log //查看提交到版本库的日志
git log --pretty=online //查看提交到版本库的日志(更养眼的信息行)
日志参数说明
commit:版本号/id(全球唯一)
Author:提交者(用户名和邮箱,后面说明)
Date:提交时间
git diff //查看未add到暂存区的版本差异
git reset --hard HEAD^ //将工作区、暂存取和HEAD保持一致,即版本回退至最新commit的版本,一个^代表上一个,n个就是前n个
git reset --hard 版本号/id //回退到指定版本(版本号唯一标识代表版本)
//版本回退可以理解为“时光倒流”,回到某之前版本之后,其后的所有版本都将消失(log中会清除这些记录),想撤回的话,如果命令框还没关,可以找到想要回去的版本号/id回到该版本(卡“时间倒流”),如果命令框关了还是有办法撤回的,详见百度
git rm 文件名 //删除本地文件。同时会导致工作区和版本库不一致,需要继续执行git commit操作保持一致
git add 文件名 //将工作区的某个文件提交到暂存区
git add . //将整个工作区文件提交到暂存区(除.gitignore文件中声明排除的文件外)
git commit [-m "我提交啦"] //将暂存区的数据提交到版本库,-m备注
//后面介绍与远程仓库的交互
3、分支管理和命令介绍
1.分支管理概述
分支的目的在于备份项目,同时给不同开发人员独立完成且能合并项目提供条件和环境。
2.分支命令
git branch //查看所有分支
git branch 分支名 //创建子分支
git checkout 分支名 //切换分支,前面已经说到,同一个项目,不同分支下内容是不同的
git merge 分支名 //将某个分支合并到当前分支,注意:当前当前当前当前
git branch -d 分支名 //删除分支(千万不要删除master主分支)
关于项目开发中分支的具体作用详见:https://blog.csdn.net/Dr_Chen_996/article/details/108412595?spm=1001.2014.3001.5502
4、Gitee(码云)-基于 Git 的代码托管和研发协作平台
在平台注册之后可以新建仓库(一个项目就是一个仓库)之后,就可以在本地使用git命令把我们的项目发布到自己的仓库啦
注意:在对自己的项目操作的时候最好也进行复制备份
提交本地项目到远程仓库流程
git config --global user.name "对应码云的用户名"
git config --global user.email "对应码云的邮箱"
git init //项目初始化,在当前(项目.idea同级位置)创建版本库(版本库就是.git文件夹,当前是工作区,里面有个index文件就是暂存区)
git add . //将项目提交到暂存区,排除.gitignore声明的文件,因为项目中如.idea、.classpath、.settings这些文件是没必要提交的
git commit [-m "提交了xx项目"]
git remote add orgin 远程仓库路径 //配置远程仓库请求路径,记得要有这个仓库
git push -u orgin 分支名 //将版本库(即最新的项目版本)提交到远程仓库,提交的时候会对应分支,即提交本地master主分支就会提交到远程仓库的master主分支,开发中测试没bug之后再提交到主分支
//弹出一个框, 输入码云(即登录邮箱)账号与密码
5、idea使用Gitee开发
1.开发步骤
①先从远程仓库Clone(第一次都是克隆,之后pull即可)项目到idea(界面Get from Version Control,或者工具栏的VCS点击)
②从master checkout切换(ideapull项目之后右下角提示)到子分支(避免直接在master上操作),
③在子分支操作完之后需要提交则右击项目Git,add、commit(或VCS操作)提交到版本库
④如果只提交到远程仓库的子分支则直接右击项目Git,push(或VCS操作)到远程仓库子分支
⑤如果要提交到远程仓库主分支上,需要checkout切换回master主分支,并且将操作的子分支merge合并到主分支上,然后右击项目Git,push(或VCS操作)到远程仓库主分支上
注意:
- 提交到远程仓库时必须保证最后一次操作是commit到了版本库
- 提交到远程仓库时不要选择.idea和.yml等文件,只需要提交更改过、新增、删除等操作过的对象
2.代码冲突
对项目进行push、pull和分支合并的过程免不了遇到代码冲突问题。
idea提供冲突界面解决框,对于冲突位置:
- 只使用自己的版本
- 只使用对方版本
- merge合并
一般解决冲突后测试没问题了才commit到远程主分支。而如果当前合并者遇到bug,一般只能回退到上一个没有bug的版本或者只能自己解决冲突。