image.png

一、Git

1.1 版本控制器

在单人开发过程中,需要进行版本管理,以利于开发进度的控制。
在多人开发过程中,不仅需要版本管理,还需要进行多人协同控制。

1.2 Git概述

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
官网:https://git-scm.com/

1.3 Git安装

下载Git:https://git-scm.com/downloads
image.png
安装,除了安装位置外,其他一直下一步即可
- 安装后,打开cmd
- 如下信息会在提交代码时要使用,记录在你的每次提交中。以后才知道哪次提交是谁做的。

  1. git config --global --add user.name "Your Name" #用户名
  2. git config --global --add user.email "email@example.com" #邮箱
  3. # 查看信息
  4. git config -l

测试:cmd中执行 ,查看git版本

  1. git version

image.png

1.4 Git架构

image.png
- 版本库:工作区中有一个隐藏目录 .git,这个目录不属于工作区,而是git的 版本库,是git管理的所有内容
- 暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
- 分支:版本库中包含若干分支,提交的文件存储在分支中

1.5 Git仓库

对应的就是一个目录,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录,作为仓库。
仓库中的每个文件的改动 都由git跟踪。
选择一个目录,执行指令:git init
image.png
工作区:
执行git init的目录即为工作区,如上例,D:\repo1目录即为工作区【不包含.git目录】
所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制。
暂存区:
暂存区也在 .git 目录内,工作区的文件进入仓库时,要先进入暂存区。
分支:
版本控制,简单说,就是记录文件的诸多版本,分支就是这些版本的最终记录位置。

二 、Git命令

2.1 status

执行git status可以看到工作区中文件的状态:
image.png

2.2 add

执行 git add . 将工作区中的文件全部存入暂存区
image.png

2.3 commit

执行 git commit -m “这里写提交的描述信息” 作用是将暂存区的文件存入分支,形成一个版本
image.png

2.4 log

2.5 hard

1.查询提交日志
git log
找到要回滚的版本
image.png
2.执行版本回退
git reset —hard bf2659c6bd933978d791f129d6defe103a0dcc17

三、Git企业级操作

3.1 远程仓库工作模式

当多人协同开发时,每人都在自己的本地仓库维护版本。
但很重要的一点是,多人之间需要共享代码、合并代码,此时就需要一个远程仓库。
image.png
有很多远程仓库可以选择,比如 github(https://github.com/),码云(https://gitee.com/);
此两种可以注册自己测试使用,但如果是商业项目,需要更多支持需要付费。
公司内部也可以有自己构建的远程仓库,使用Gitlab搭建

3.2 码云使用

注册git服务器账号:
码云 注册账号,并登录。
进入公司后,很可能会使用公司自己搭建的git服务器,则账号向领导索要即可
也可以选择github
注册登陆账号:
image.png
新建仓库:
image.png
image.png
image.png
image.png

3.3 配置码云

a.本地生成ssh密钥(私钥和公钥)
右键—->Git Bash Here—->Git命令端
image.png
执行命令:
ssh-keygen -t rsa -C “邮箱”
image.png
c盘用户目录下查看生成的密钥对
image.png
登陆Gitee—-头像—-设置 实现SSH公钥配置
image.png
拷贝公钥-id-rsa.pub
image.png

本地关联远程仓库:
本文档中选用仓库的 https协议的地址,将此地址关联到本地git中
image.png
推送文件到远程仓库:
将本地仓库中已经commit的内容push到远程仓库,以共享自己的代码。
image.png
image.png
克隆远程仓库:
如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过 git clone 将其复制到本地。
image.png
image.png
代码共享:
多人协同开发时,写好代码的git push 上传到远程仓库;需要代码的 git pull 拉取代码即可。
image.png
image.png
常用远程命令操作:

命令 描述
git remote add 标识名(master) 远程地址 本地关联远程仓库
git push 标识名 master 将本地仓库内容上传到远程仓库
git pull 标识名 master 从远程仓库下载内容到本地仓库
git clone 远程地址 将远程仓库复制到本地,并自动形成一个本地仓库

3.3 分支

分支,是一个个版本最终存储的位置。
分支,就是一条时间线,每次git commit形成一个个版本,一个个版本依次存储在分支的一个个提交点上。
image.png
查看分支:
查看当前仓库的分支 git branch
仓库中默认只有 master 分支
执行git commit时,默认是在master分支上保存版本
image.png
创建分支:
在商业项目开发过程中,我们不会轻易的在 master 分支上做操作。
我们会新建一个开发用的分支,在此分支上做版本的记录。
当代码确实没有问题时,才会将开发分支上成熟的代码版本添加到 master 分支上。
保证开发过程中,可以及时记录版本,又保证 master 分支上每个提交点都是稳健版本。
image.png
切换分支:
默认情况下,当前使用的分支是 master分支
可以切换到 dev分支,则后续的git commit 便会在dev分支上新建版本(提交点)
image.png
image.png
分支提交日志:
查看分支的提交日志,进而看到分支中提交点的详细情况。
image.png
image.png
分支合并:
两个分支内容的合并,git merge 分支a 合并分支a
合并的方式有两种:快速合并 和 三方合并。
如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可。
image.png
image.png
在不具备快速合并的条件下,会采用三方合并:
image.png
image.png

3.4 分支创建细节

新建分支细节:
新建分支时,新分支,默认有哪些内容?分支中包含了哪些次提交?
新分支初始内容:
每个分支都有一个指针,新建一个分支,首先是新建一个指针。
而且新分支的指针会和当前分支指向同一个提交点。
新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。
image.png
多分支走向:
在master分支和新分支,分别进行 git add 和 git commit
分支情况如下图:
image.png
image.png

3.5 分支合并冲突

合并冲突:
两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改
场景模拟如下:
image.png
image.png
在master分支 合并 dev分支:
image.png
此时,打开hig.txt 文件:
image.png
冲突解决:
出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:
1. 保留某一方的,删除另一方的
2. 保留双方的
3. 但无论如何,要记得删除 <<<< ==== >>>> 这些
4. 本质是两人协商为冲突的内容,定制出合理的内容。
image.png
image.png

3.6 Idea关联Git

关联Git
image.png
image.png
image.png

File > Settings 关联过程是自动的
image.png
创建仓库
新建项目后,将项目目录创建为git仓库
注意: 要在建仓库前,设置忽略文件 “.gitignore”
作用:被忽略的文件会被版本记录忽略,版本中不包含它们。
范围:不需要和其他开发共享的文件,具体见下图。
image.png
image.png
提交-commit
创建好仓库后,做第一次提交。
image.png
image.png
image.png
创建分支
新建开发分支
image.png
image.png
image.png
上传到远程仓库(push)
创建一个远程仓库。
要求是裸库,且建议库名和项目名同名。
image.png
image.png
image.png
image.png
复制到本地仓库(clone)
如果有建好的远程仓库,比如公司内已经在用的仓库,或者github,码云上的一些公开仓库,
可以将远程仓库的项目复制到本地使用。
image.png
image.png
image.png
更新本地项目
如果远程仓库有更新,则你的本地项目也需要一起更新。
image.png
image.png
image.png
冲突解决
合并分支时,如果出现冲突,则需要解决冲突
image.png

3.7 多人协作开发

多人开发协同,git操作,由管理员负责创建一个远程库,初始的库中什么也没有,为裸库,库的名称建议和项目同名,管理员会在idea中创建一个初始项目,其中包含.gitignore文件,并在项目根目录下 建立本地库。并建立 dev分支。管理员将本地库上传到远程库,将其他开发人员拉入远程库的 开发成员列表中 ,使得其他开发人员可以访问该远程库。
流程如下:
image.png
image.png
image.png
master分支设置为 protected分支,只有管理员有权限将代码合并到其中。dev分支设置为 常规分支 所有开发人员,都可以其中合并代码
image.png
开发人员
初始化:在idea中clone 远程库,获得项目。会建立本地库
后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit 提交到本地的dev分支中,然后上传(push)到远程dev分支中。
需要更新项目内容时,通过 pull 从远程仓库拉取内容。
注意:多人协同时,每次在 push 到远程库前,都先做一次pull,一来是把远程最新内容合并到本地,二来是核实本地内容是否和远程内容有冲突。
后续的开发,会接到一个个的功能任务,往复操作 2>、3>、4> 而已。

转载 https://www.yuque.com/feri/fwibdh/pxqxf3