# 代码版本管理

# Git版本管理(主流)

# 总述

git 是一种版本控制系统,是一个命令,是一种工具。

git是分布式版本控制系统,市面上有github、gitee、gitlab,它们的区别可以参考文章:https://blog.csdn.net/weixin_45664402/article/details/117061418

# Git使用经验

# 使用准备

使用Git首先需要在本机安装Git Client,网上搜索“Git下载”即可获得地址:https://git-scm.com/downloads

这是一个命令行工具,安装之后通过鼠标右键找到Git Bash Here即可快速打开命令行窗口,除了可以执行git本身命令外,还可以在Windows系统下执行Linux的一些命令。

除此之外,也可以下载TortoiseGit可视化工具,这个工具类似TortoiseSVN,一定程度上可以让SVN用户快速过渡。

Git GUI安装完成之后,通过鼠标右键运行Git Bash Here,分别执行以下两句命令,这个非常关键,务必设置真实姓名,您在Gitlab上面的提交记录都是跟这个有关:

git config --global user.name "你的真实姓名" 
git config --global user.email "你的邮箱地址"

# 使用SSH Keys

从远端Git代码仓库克隆代码、更新代码、推送代码都需要帐号密码权限,每次重复输入很麻烦,SSH Keys提供了一种机制无需输入帐号密码也能完成所有远端Git代码仓库交互操作。

建议使用Git时都在远端仓库配置上SSH Keys。具体配置方法可以见另一篇文档“搭建开发环境”篇,或者自行从网上查询。

# Gitlab常用操作

# 获取项目权限

Gitlab中的owner和maintainer具有项目授权的权利,通过Gitlab在线系统-对应工程-成员菜单进行授权。

1650786456489.png

# 角色权限级别

在授权过程中,整个Gitlab有如下的角色,授权人可以根据申请人的身份级别给予对应权限。

一般开发人员给予developer可读可写的权限,如果你想让人协助代管此工程,则可以给予maintainer权限。

角色名 权限
guest project中的wiki文档查看
reporter 只读:只能clone、查看项目代码,无法提交代码到远端仓库
developer 读写:在无保护分支中正常读写代码,在受保护分支可发起合并请求由更高角色审批通过后合并代码
maintainer 管理员:可读写代码、可管理当前项目及授权maintainer、developer、reporter、guest权限
Owner 超管:可读写代码、可管理当前项目及授权maintainer、developer、reporter、guest权限

# Clone代码

将代码从远程仓库clone到本地,通过命令行完成clone操作(示例摘抄自Gitee帮助中心):

$ git clone https://gitee.com/用户个性地址/HelloGitee.git #将远程仓库克隆到本地

# 提交代码

通过命令行将代码推送到远程仓库示例如下:

$ git add . #将当前目录所有文件添加到git暂存区
$ git commit -m "my first commit" #提交并备注提交信息
$ git push origin master #将本地提交推送到远程仓库

不同开发工具IDE同样提供了快速推送代码的操作,通常推送代码需要如下操作:

1、新增文件,需要将文件执行Add操作,推荐设置新增文件自动Add

2、修改代码之后,先执行commit File操作,添加提交备注,执行commit操作(不允许使用commit and push)

3、接下来先执行pull操作,确认下远程仓库代码是否存在冲突,冲突之后则进行代码合并

4、以上完成之后执行push操作,将代码最终推送到远程仓库

1650786477626.png

# Merge Request

在个人项目,我们通常都是用push的形式将代码合并到远程仓库。而在大型项目中,为了保证代码的编写质量,往往需要进行代码Review,而Git的Merge Request特性就是用于解决代码Review问题的。

场景演示:我现在需要修改一个问题,将修复代码合并到dev分支,通过Merge Request的操作步骤为:

1、通过访问gitlab在线系统或自己的IDE创建一个新分支,分支名自定义如dev-merge,选择分支复制自dev。

2、开发将dev-merge分支checkout到本地,然后在该分支上修改代码。

3、随后开发通过commit+push操作将代码推送到远程的dev-merge分支上。

4、开发通过gitlab在线系统找到dev-merge分支能看到刚才自己提交的代码记录,检查代码无误后,通过“创建合并请求”按钮发起Merge Request,合并目标选择dev,并填写相关备注。

5、Merge Request发起之后,开发通知工程管理员合并代码。

6、工程管理员可以通过gitlab在线系统右上角“合并请求”图标快速找到Merge Request,在线看到代码差异,在线Review,如果通过则一键合并,如果不通过则关闭本次Request,一键合并之后代码自动合并到dev分支。

网上有很多图文操作,可以自行学习:https://blog.csdn.net/qq_38875300/article/details/105050562

# 分支A全量合并到分支B

分支A有20条代码提交记录,并且来自不同开发,此时项目组要求将分支A的所有代码记录合并到分支B以保证两个分支的代码保持一致。

下面使用IntelliJ IDEA演示如何快速完成合并:

[分支A]的代码合并到[分支B]

1、checkout[分支B],保证本地项目所在分支为[分支B]

2、在右下角选择分支列表,找到远程分支[origin/分支A],点击箭头符号,选择“Merge selected into current”,意思是将[origin/分支A]的合并到[分支B]

3、如果没有冲突,执行上一步操作后会自动merge成功,如果有冲突会弹出比对窗口,此时需要开发手动选择使用哪个分支的代码

4、上一步merge等同于自动commit,最后对[分支A]执行push操作即可将变更推送到远程仓库

# 挑选部分提交记录合并到分支B

分支A有20条代码提交记录,此时项目组要求只将分支A中某几条记录合并到分支B,可以使用cherry-pick完成。

下面使用IntelliJ IDEA演示如何cherry-pick部分提交记录:

[分支A]的一部分代码cherry-pick到[分支B]

1、checkout[分支B],保证本地项目所在分支为[分支B]

2、在底部工具栏“Git”中找到所有的分支列表,再找到当前工程的远程[origin/分支A]分支,鼠标左键单击之后,在右侧能看到该分支的所有提交记录

3、在上一步基础上,选择你要合并的提交记录,再用鼠标右键选择“Cherry-pick”即可,此步操作等于将远程[分支A]指定记录commit到本地[分支B]

4、最后对[分支A]执行push操作即可将变更推送到远程仓库

# 回滚commit记录

对于已经commit提交的代码记录,如果想反悔不提交的话,不同场景下有不同方式,IntelliJ IDEA提供了Undo Commit,Revert Commit,Drop Commit三种操作,对应使用效果见:https://blog.csdn.net/qq_33637730/article/details/123256813

# SVN版本管理(非主流)

# 总述

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

SVN在过去是一种主流的版本管理工具,现在Git是主流的版本管理工具。

# SVN使用经验

# 使用准备

使用SVN首先需要在本机安装TortoiseSVN,这是一个可视化工具,可以进行SVN下载、上传、还原等全部操作。

开发工具则需要安装SVN相关插件,有SVN插件后可以在开发工具中直接上传下载代码。

# 常用操作

1650797084288.png

# 下载项目

SVN每个分支都是一个URL,在管理员授予相关读取权限后即可下载。

在安装好TortoiseSVN的基础上,通过鼠标右键,选择“SVN Checkout”,输入对应工程分支的路径,再输入自己的帐号密码即可下载。

# 更新文件

如果SVN仓库有内容变更,本地需要进行更新。

在安装好TortoiseSVN的基础上,找到本地对应SVN目录,通过鼠标右键,选择“SVN Update”即可完成更新

# 提交文件

本地文件修改之后,需要提交到SVN仓库。

在安装好TortoiseSVN的基础上,找到本地对应SVN目录,鼠标右键,选择“SVN Commit”,添加提交备注后确定。

# 还原本地记录

本地修改的文件还未提交到中央仓库,此时需要废弃本地的修改文件,可使用revert操作。

在安装好TortoiseSVN的基础上,鼠标右键>TortoiseSVN>Revert会弹出变更的问题,手动选择需要还原的操作即可。

# Clean文件锁

如果提交冲突、提交时网络中断、update更新网络中断,很容易出现文件lock问题,此时无法提交、无法更新代码,需要使用clean操作清理lock文件。

在安装好TortoiseSVN的基础上,鼠标右键>TortoiseSVN>选择Cleanup操作即可。

# 查看提交记录

在安装好TortoiseSVN的基础上,鼠标右键>TortoiseSVN>Show log可以弹出提交记录。

在log记录列表中,选择两个提交鼠标右键>Compare reversions能看到两个文件的差异。

# 预览目录

如果想预览指定路径下有哪些文件,可以不用checkout文件,使用Repo-browser也能完成。

先准备好自己有权限的SVN URL,在安装好TortoiseSVN的基础上,鼠标右键>TortoiseSVN>选择Repo-browser即可预览该URL下的所有文件。

# 导出无SVN记录的文件

如果将整个文件夹拷贝到别的位置,此文件夹也会卸载SVN记录,为了保证复制到别处的文件夹是干净的文件,需要使用Export导出操作。

在安装好TortoiseSVN的基础上,鼠标右键>TortoiseSVN>选择Export to>最后选择目标文件夹,即可将SVN文件导出到别的目录并且不卸载SVN记录。

编撰人:admin、het