1 版本管理
在开发的过程中用于管理对文件、目录或工程等内容的修改历史,方便查看历史记录,备份以便恢复以前的版本的软件工程技术
1.1 版本控制分类
1.1.1 本地版本控制
说明:版本更新库和使用版本库的文件都在同一个主机中,只需要通过checkout取出相应的版本
1.1.2 集中版本控制
- 所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
- 用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本
- 所有数据都保存在单一的服务器上,如果这个服务器会损坏(有很大的风险), 这样就会丢失所有的数据,需要定期备份
1.1.3 分布式版本控制
- 所有版本信息仓库全部同步到本地的每个用户
- 可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时 push 到相应的服务器或其他用户那里。
- 每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据
- 更加安全, 不会因为服务器损坏或者网络问题,造成不能工作的情况
2 Git 下载&安装
- 地址: https://git-scm.com/
- 下载版本: Git-2.33.0.2-64-bit.exe
- 下载慢,可以到镜像下载 : http://npm.taobao.org/mirrors/git-for-windows/
2.1 安装
- 说明:直接下一步即可,建议安装到非系统盘, 比如 d:\
- 细节:安装路径不要带中文、空格、特殊字符
- 验证安装是否成功(右键)
3 Git 资料
4 Git 基本配置
4.1 设置用户名与邮箱
- 安装 Git 后, 首先要设置你的用户名称和 e-mail 地址, 因为每次 Git 提交都会使用该信息
- 指令
#用户名
git config --global user.name "hspedu"
#邮箱
git config --global user.email "hspedu@xx.com"
- 指令成功执行,会生成 C:\Users\Administrator.gitconfig, 信息如下
查看当前用户配置:git config --global --list
或者:git config -l
—查看所有配置
4.2 Git 的配置文件
- system 配置文件
Git\etc\gitconfig
:Git 安装目录下的 gitconfig - global 全局文件
C:\Users\Administrator\ .gitconfig
只适用于当前登录用户的配置,可以手动进行修改
5 Git 工作原理[重要]
5.1 四个工作区域
Git 本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库
(Repository 或 Git Directory)。如果再加上远程的 git 仓库(Remote Directory)就可以分为四个
工作区域。文件在这四个区域之间的转换关系如下
- Workspace:工作区,就是你平时存放项目代码的地方
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中 HEAD 指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器(比如 Github/Gitee),可以简单的认为是你项目组中的一台电脑用于远程数据交换
5.2 工作流程
- 在工作目录中添加、修改文件;
- 将需要进行版本管理的文件放入暂存区域;
- 将暂存区域的文件提交到 git 本地仓库。
因此,git 管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
6 Git 仓库创建
6.1 创建工作目录与常用指令
工作目录(WorkSpace)一般就是你希望 Git 帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文(clone也会体现到workspace上面)
6.2 本地仓库-创建
6.2.1 创建全新的仓库(git init
)
演示在本地创建全新仓库 d:\hspgit
- 创建目录 d:\hspgit 作为本地 git 仓库
- 右键
- 执行
git init
- 执行后可以看到,仅仅在项目目录多出了一个.git 目录,关于版本等的所有信息都在这个目录里面
6.2.2 克隆远程仓库($ git clone [url]
# url 就是远程 git 项目的地址)
演示在本地克隆远程仓库 d:\hspgit2。说明: 克隆远程代码仓库,就是将远程服务器上的仓库完全镜像一份至本地
7 Git 文件管理
7.1 文件四种状态
● 版本控制就是对文件的版本控制,在 Git 管理中,文件被统一管理,有四个状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到 git 库, 不参与版本控制. 通过
git add
状态变为Staged - Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种处理方式, 如果它被修改, 变为 Modified. 如果使用
git rm
移出版本库,则成为 Untracked - Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这种文件有两个去处, 通过
git add
可进入暂存 staged 状态, 使用git checkout
则丢弃修改过, 返回到 unmodify 状态,这个 git checkout 即从库中取出文件, 覆盖当前修改 - Staged: 暂存状态. 执行
git commit
则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存, 文件状态为Modified
7.2 文件操作指令
7.2.1 查看指定文件状态:git status [filename]
- 先在 D:\hspgit2\lunar-javascript , 创建一个测试文件 ABC.txt,并查看状态
- 查看所有文件状态:
git status
- 添加当前目录的所有文件到暂存区:
git add .
- 提交暂存区中的内容到本地仓库:
git commit -m "消息内容"
8 Gitee 创建代码仓库
8.1 设置本机绑定 SSH 公钥,实现免密登录
-
进入 C:\Users\Administrator.ssh , 没有就手动创建该文件夹
-
如果该目录下有相应文件,先删除(第一次操作是没有的)
-
执行指令
ssh-keygen
, 生成文件(说明:直接回车即可), ssh-keygen 指令更多说明:
https://blog.csdn.net/weixin_37335761/article/details/120146098 比如: ssh-keygen -t rsa
-C ‘hello@qq.com’ -f ~/.ssh/github_id_rsa
-
将公钥信息 public key 添加到码云账户
9 IDEA 项目使用 Git 管理
9.1 将 gitee 创建的 hspjava 项目拉取到 IDEA,进行管理
9.1.1 创建项目进行测试
- 将 HI.java add 到 git, 说明:将 HI.java 加入到暂存区(文件由红色变为绿色)
- 将 HI.java commit 到 git(这里会要求你添加描述,文件颜色由绿变蓝)
- commit 只是将 HI.java 提交到本地仓库
- 并没有 push 到远程仓库(即 GitHub/Gitee)
-
将 HI.java push 到 Gitee , 会输入用户名密码验证(是 Gitee 的账号).
-
观察 Gitee 上项目的变化
9.2 创建了一个 IDEA 项目(没有从 Gitee拉取), 后面又希望和 Gitee的某个代码仓库关联,如何操作?
- 在 Gitee 创建一个仓库,比如 hsp-sns
- 创建一个 springboot /maven 项目 hsp-sns
此时,这个项目没有被git接管,上面的改变不会影响码云 - 克隆 gitee 的 hsp-sns 到 d:/git-hsp-sns
- 将克隆下拉的 hsp-sns 的文件,拷贝到 IDEA 对应项目中
- 刷新,或者重启 IDEA 项目
- 创建文件 D:\java_projects\hsp-erp\src\main\java\com\hspedu\hspsns\Hello.java
- 完成 add, commit , push 一系列操作
9.2 如何查看操作记录
切换到对应的版本:checkout
9.3 一个 IDEA 项目(从 Gitee clone), 后面又希望获取 Gitee 的代码仓库最新代码, 如何操作?pull
- 这个需要将光标放到项目上面
- pull代码之后,会出现问题:环境问题–》解决:光标放到项目上面–>projectstructure–>点到java–>右键source–>解决
10 GIT 分支管理
- 分支可以有多个(根据业务需求)
- 如果各分支没有交集,始终平行发展,则不需要合并(merge)
- 如果两个分支,需要合并(一般开发主线是稳定的版本,其他功能测试成功后再合并到主分支),则执行
merge
操作
10.1 案例实践
10.1.1 环境搭建
- 先在 Gitee 创建仓库 hsp-erp, 并设置成开源
- 在新的目录比如 d:/idea_projects 使用 idea 创建 hsp-erp maven, 并和 Gitee 仓库 hsp-erp
关联 - 创建文件 HspErpApplication.java , 写入一些内容
- 将 HspErpApplication.java push 到 Gitee 远程仓库 , 执行 add->commit->push
- 观察 Gitee 远程仓库是否已经 push 成功
10.1.2 git 分支指令
10.1.3 IDEA 项目创建分支
- 创建分支
- 把分支同步到 Gitee 远程仓库
- 查看远程仓库
10.1.4 IDEA 项目切换分支, 进行工作
- 切换分支(指令
checkout
)
- 在 v2.0 分支下 , 我们修改/增加一下文件, 就是针对当前 v2.0 的
- 把 HspErpApplication.java Add->Commit->Push 到 Remote 仓库, 按照老师步骤来.
- 观察 Gitee 的远程仓库变化
- 观察本地仓库 版本切换的变化
10.1.5 IDEA 项目分支合并, 没有冲突的情况
● 在进行分支合并时, 如果没有冲突(比如没有修改同一个文件), 这时会比较顺畅.
- 案例演示/需求说明: 将分支 v3.0 合并到 Master 主分支(在master开分支,就右键master创建分支,该分支就是master的复制品)
- 从 master 开一个分支 v3.0, 在 v3.0 增加一些文件, 不在 master 和 v3.0 修改同一个文件(也就是说增加的文件是master没有的)
- 将分支 v3.0, 同步到 Gitee 远程仓库, 操作步骤和前面一样开 v2.0 一样
- 切换到 v3.0, 并增加一个文件 Hi.java, 并 Add->Commit->Push 到远程仓库
- 注意看 Master 主分支,在本地仓库和远程仓库, 都没有 Hi.java
- 将 v3.0 合并到 Master 分支, 注意当前是 Master 主分支(看图标)(也就是说要checkout到主分支)
- 注意看 Master 主分支,这时在本地仓库, 有 Hi.java , 但是远程仓库还没有
- 将本地的 Master 分支, Push 到远程仓库, 这时观察远程仓库 Master 下也有 HI.java 了
10.1.6 IDEA 项目删除分支
- 如果某个分支不需要了, 可以删除, 一定要慎重
- 注意观察远程仓库, 分支 V3.0 也没有了
- 只删除本地分支, 还可以重新获取
获取方法:项目–右键–git–repository–brabches–选中要获取的分支
10.2 注意事项和细节说明
- 在进行分支合并时, 最好是各分支都已经处于 Committed 的状态, 这样可以减小处理合并冲突的难度.
- Push 操作, 是 Push 你已经 Committed 的代码, 如果你修改了一个文件, 但是你没有执行Commit ,那么你 Push 的其实是上次 Committed 的状态
- add 、 commit 、push 的操作可以针对单个文件, 也可以针对文件夹
- 文件要 Commit 前需要先 Add 到 暂存区 , 以后文件修改了, 就可以直接 Commit
- 如果要删除文件, 可以在本地删除该文件, 然后 commit 文件所在文件夹即可, 并重新push 该分支, 那么在远程仓库, 也会删除对应分支的文件