版本控制器

  1. 集中式版本控制工具 SVN、CVS

  2. 分布式版本控制工具 Git
    共享版本库+每个人的电脑上都是一个完整的版本库
    速度 简单的设计 对非线性开发模式的支持(允许多分支) 完全分布式 有能力高效管理类似Linux内核一样的超大规模项目

git工作流程

远程仓库-本地仓库-暂存区-工作区

  1. clone克隆:从远程仓库克隆代码到本地仓库
  2. checkout检出:从本地仓库中检出一个仓库分支然后进行修订
  3. add添加:在提交前先将代码提交到暂存区
  4. commit提交:提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch抓取:从远程库抓取到本地仓库,不进行任何的合并动作,一半操作比较少
  6. pull拉取:从远程库拉到本地库,自动进行合并(merge),然后放到工作区,相当于fetch+merge
  7. push推送:修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

设置用户名和邮箱地址
git config —global user.name “Your Name”
git config —global user.email “email@example.com”
查看配置信息
git config —global user.name
git config —global user.email

配置别名

在用户根目录下创建.bashrc文件
touch ~/.bashrc
在.bashrc文件中输入一下内容

用于输出git提交日志

alias git-log=’git log —pretty=oneline —all —graph —abbrev-commit’

用于输出当前目录所有文件及基本信息

alias ll=’ls -al’

获取本地仓库

在电脑任意一个位置创建一个空目录
进入,右键打开git bash
执行git init
成功后执行ll会看到隐藏的.git目录

git常用指令

git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
新建一个文件,处于未跟踪untracked状态,修改已有文件,处于未暂存unstaged状态,执行git add后变为已暂存状态staged(暂存区,提交到仓库之前的缓存区),执行git commit后变为已提交状态committed(已提交到本地仓库),成了一次提交记录
git add 工作区->暂存区 +文件(git add file01.txt) 或者+.(通配符)代表所有文件
git commit 暂存区->本地仓库 gir commmit -m “提交的描述信息”

git status 查看工作区状态

git log 查看提交日志 -all显示所有分支 -pretty=oneline显示一行 -graph以图示方式显示 -abbrev-commit使得输出的commitId更简短 (可以git log后面跟多个小命令)

版本回退

git reset —hard commitID (commitID可以用git log或git-log查看)
git reflog 可以看到已经删除的提交记录

添加文件到忽略列表

在工作目录中创建.gitignore,列出要忽略的文件模式

分支

几乎所有版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
查看本地分支 git branch
创建本地分支 git branch 分支名
删除分支 git branch -d 分支名 (-D强制删除)
切换分支 git checkout 分支名
创建并且切换分支 git checkout -b 分支名
合并分支 git merge 分支名

解决冲突

两个分支上对文件的修改可能会存在冲突,解决冲突需要手动解决
步骤:

  1. 处理文件冲突的地方
  2. 将解决完冲突的文件加入暂存区
  3. 提交到仓库(commit)

开发中分支使用原则与流程

master(生产)分支:线上分支,主分支,用于存放对外发布的版本
develop(开发)分支:是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支准备上线
feature分支:从develop创建的分支,一般是同期并行开发,但后期不准备上线的版本,功能完成后需要合并到develop分支
hotfix分支:从master创建的分支,一般是线上出现紧急问题时,需要及时修复的分支,修复完成后需要合并到master、test、develop分支
还有test分支(用于代码测试)、pre分支(预上线分支)等

远程仓库

常用托管服务[远程仓库]:github、gitee、gitlab等

以gitee为例
新建一个仓库
在gitbash中执行ssh-keygen -t rsa生成SSH公钥,输入cat ~/.ssh/id_rsa.pub查看公钥
在gitee设置中设置账户公钥
输入ssh -T git@gitee.com测试配置是否成功
在gitee创建的仓库中复制SSH地址,在gitbash中输入git remote add origin git@gitee.com:xxx/xxx.git(origin是远程仓库的别名 后面是SSH地址)
查看远程仓库 git remote
推送到远程仓库 git push [-f][—set-upstream][远端名字][本地分支名][远端分支名] (一样和省略一个) -f强制覆盖(一般不用)—set-upstream 推送到远端的同时建立起和远端分支的关联关系
eg:git push origin master

从远程仓库克隆

在gitbash中执行命令:git clone <仓库路径>[本地目录] (本地目录可以省略,省略后会在当前目录下创建和远程仓库名同名的文件夹)

从远程仓库中抓取fetch和拉取pull

git fetch [远程仓库的别名][远程分支名] (fetch只是从远程仓库获取最新版本到本地,不会自动合并)后续还要merge 如果不指定远端名称,默认抓取所有分支
git pull [远程仓库的别名][远程分支名] (pull是fetch+merge,从远程仓库获取最新版本并自动合并到本地)
如果不指定远端名称,默认抓取所有分支并更新当前分支

解决合并冲突
一段时间,A、B两个同时开发,修改了同一个文件的同一部分,push的时候会报错,此时需要先pull,解决冲突后,再push

IDEA中使用Git

设置-版本控制-Git 配置Git路径
在Gitee中创建一个远程仓库,复制SSH地址
在IDEA中打开一个项目,在version control中将该项目目录设置为本地git仓库 然后可通过commit提交
再连接远程仓库,通过push提交到远程仓库