版本控制是什么
什么是“版本管理”或“版本控制”?我为什么要关心它呢?如果你是一位软件工程师,那么一般你需要备份从项目开始到成果发布过程的所有修订版本,在这种情况下选用版本控制系统(VCS)将是一个明智的选择。通过保存在项目开发过程中的所有修订版本,你可以随时将项目回滚到某一历史版本,也可以随时对于不同版本之间的差异进行比对。通过版本控制,你可以进行问题溯源,找出某一问题的罪魁祸首是哪一位工程师,问题出现在项目的哪一个版本。另外,假如你的本地文件由于某种奇怪的因素遭受了破坏,例如硬盘进水等,你可以随时恢复原来的样子,只要你向远程仓库提交过最新的项目版本,那么所有的代码、文件都会被保存下来。
Git是什么
版本控制系统有很多种类。最原始的状态是本地版本控制系统,你可以在电脑硬盘上开辟一块区域作为你的项目仓库,在每次更改后都保存一次最新的文件到仓库里去。这种版本控制的方法应用极为广泛,从PCB绘制工具Altium Designer到Windows系统,你都可以看到本地版本控制系统的踪迹。当项目出现多人协作需求时,集中化版本控制系统(Centralized VCS)应运而生。这种版本控制系统的原理是,所有的历史文件都被保存在中央服务器的硬盘中,开发者从中央服务器同步时只下载项目的最新版本。这种方案的缺点在于,假如中央服务器的硬盘出现故障,那么所有的历史文件都将丢失,只有开发者手中的最新版本项目文件得以保留。
Git是一种分布式版本控制系统。分布式版本控制系统与集中式版本控制系统的最大区别在于,所有的开发者手上都有完整的历史文件镜像,并且每一次同步都将获得所有项目历史修订记录。这种方案的最大好处在于,对于一个小规模的工程,开发者可以掌握项目开发的所有过程,工程文件的安全性也得到了保证。但是,在每个开发者的终端上备份完整的历史文件镜像必然不适合大规模的工程。
在MATLAB中使用Git
打开MATLAB R2019b,在命令行窗口中输入
!git
假如出现以下一大段文字,说明系统已经安装好Git,且MATLAB可以正确调用Git。
倘若MATLAB提示你命令无法识别,那么说明你的计算机中还没有安装Git。
安装Git
首先下载最新版Git,版本号为2.24.1.2,官网下载地址如下:https://www.git-scm.com/download
当然直连国外网站的下载速度堪忧,因此推荐到腾讯软件中心下载比较靠谱,下载地址如下:https://pc.qq.com/detail/13/detail_22693.html
打开安装包,选择安装目录,除了在Choosing the default editor used by Git与Adjusting your PATH environment两个地方考虑用VS code作默认编辑器和选择use Git from the Windows Command Prompt选项以实现在cmd窗口中操作Git以外,其他的都可以按照默认的安装设置进行。
安装完毕后,你可以看到桌面上出现了Git Bash,鼠标右键也能够看见Git Bash Here和Git GUI Here选项,分别是在当前文件夹启动Git Bash和Git GUI功能。
配置Git
我们点击Git Bash Here按钮,进入命令行工具界面。
由于Git需要一个身份信息用于版本管理时的人员区分,因此我们需要通过配置本机的用户信息,告诉Git我们的身份。这里我们使用global命令,定义本机上所有仓库统一使用的用户信息。这样的操作可以使得你在操作不同的项目时使用同一身份,更加方便。
输入代码
git config --global user.name"xxx"
git config --global user.email"xxx@xxx.com"
在引号中输入你的名字以及你的电子邮箱,即可完成对于本机Git的用户信息配置。注意,这里的用户名以及电子邮箱都可以是虚拟的。
为了验证我们成功更改了用户名以及用户邮箱,我们要查看本机的config信息。
输入代码
git config --global --list
你应该能够看到以上信息。由于我设置了默认编辑器是VS Code,因此可以看到core.editor指向了VS Code文件夹下的Code.exe,另外我将我的用户名成功更改为JosylvioRayel,用户邮箱也成功更改为JosylvioRayel@163.com。这里还能看到本机Git的版本是2.24.1.2。
熟悉Git的基本操作
Git有一些独特的操作语句。通过以下一个实例,我们来熟悉一下Git的基本操作。
首先我们找一个地方新建一个测试用文件夹。进入这个空白的文件夹之后,我们右键Git Bash Here,进入Git Bash命令行窗口。
1. 创建项目
假设我们要创建一个叫做learngit的项目,并且要使得Git Bash进入到learngit文件夹,那么输入以下语句
mkdir learngit //创建learngit文件夹
cd learngit //进入learngit文件夹
pwd //显示当前的项目路径
然后我们在当前文件夹中新建一个文件,test.txt
2. 忽略文件
有时候我们的代码生成工具会自动生成一些报告,而这些报告可能是我们不需要加入到Git中去的,因此我们可以设置一个忽略文件,将不需要的文件写在忽略文件中。
3. 初始化仓库
将文件整理好之后,我们要进行仓库的建立。在Git Bash中输入语句
git init
我们可以看到,在当前工作目录下,一个.git文件夹被创建了。这个文件夹就是我们的repository,也就是Git仓库。平时尽量不要去碰这个仓库的文件,否则有可能破坏Git的正常工作。
我们确认一下仓库确实将我们的文件包含在内了,输入语句
ls -ah
4. 检查Git状态
在执行其他操作之前,我们先检查一下当前Git处于什么状态。
输入语句
git status
可以看到我们现在处于master分支上,还没有提交过,并且有以下几个文件处于untracked状态,也就是说这些文件还没有被添加到项目中去。那么通过以下语句,我们将这几个文件添加到仓库中去,然后再查看Git的状态。
git add xxx.xxx
git status
5. 执行提交
接下来我们就可以进行项目提交(commit)了。在Git中,一次提交相当于对当前的项目进行一次快照,也就是对于当前的项目状态进行了一次备份。输入语句
git commit -m "Description"
git commit用于实现提交,后面的-m "Description"用于写入该次提交的说明。这种说明是必要的,因为当你在之后的版本回溯中,可以清晰地看到每次提交的新内容或者改动。
我们可以通过不同的方式查看历史提交记录。最方便的方式是打开Git GUI,点击Repository选项中的Visualize master's History,你就可以得到master分支的所有历史更改记录。当然,假如你的项目具有多个分支,你又想查看所有分支的历史记录,就点击Visualized All Branch History按钮,你能够得到一个可视化的历史记录报告。
或者你也可以在Git Bash中查看历史记录,只不过效果没有那么好。输入语句
git log
6. 尝试进行第二次提交
现在我修改了test.txt中的内容,想要对Git仓库进行更新。那么我只需要执行和上面一样的操作就可以了。首先我们先看一下git status发生了什么变化。
那么我们先update the modification。输入语句
git add test.txt
git commit -m "Second commit"
此时输入git log,会发现什么呢?
也就是说git log也会给出所有的历史记录。
7. 撤销修改
我又修改了一次test.txt,但是我在提交之前发现我的修改有误。但此时Git已经检测到了修改,怎么办呢?
我可以直接输入语句
git checkout
这样,test.txt就恢复到了上一次的镜像中所对应的内容。
8. 删除仓库
假如我们不小心把仓库弄乱了,可能整个Git无法正常使用了,此时我们可以先删除当前的仓库,然后重新新建一个仓库。输入语句
rm -rf .git
该语句可以直接删除当前项目的仓库。我们可以看到,执行之后master消失了,此时输入pwd也不会显示.git文件夹了。
在MATLAB中配置Git
1. 创建远程仓库
MATLAB支持对于其中一个沙盒的Git提交。为了实现多人协作,我们需要使用一个Git代码托管平台。国际上比较流行的Git代码托管平台就是Github,但是由于直连外网速度较慢,我们选择使用Gitee码云平台托管我们的MATLAB代码。
Gitee地址:https://gitee.com/
我们选择加入码云。注册完账号之后,我们可以看到如下界面。
对于车队的ECU Code开发,我们可以创建一个组织,然后在该组织下创建我们的私有仓库。Gitee支持免费版私有仓库最多加入五人进行协作,这个数量对我们目前来说已经足够了。
上面是我创建的一个私有仓库,里面上传了一些乱七八糟的文件。接下来,我将告诉你在MATLAB环境中配置Git的方法。
2. 配置MATLAB中的Git
为了进行团队协作,我们要在Gitee上创建一个远程仓库,作为我们MATLAB项目的远端存储库。因此,我们到码云平台上创建一个空的仓库。
我们选择语言为Matlab,选择.gitignore文件模板为MATLAB,分支模型先选择master。分支的概念请查阅Git官方指南Git - 分支简介。另外,请不要勾选仓库初始化的复选框,这可能会导致我们在首次Push的时候出现Push fail或者远程仓库访问被拒绝问题,从而要进行强制Push。我先把强制Push的命令放在这里。假如我们希望先Pull下来远程仓库上的例如readme.md的初始化文件,我们可以先在强制Git Push之前先Pull一下仓库。
git pull origin master
git push -u origin master
那么,我们就得到了一个空白的远程仓库。接下来,我们打开MATLAB,选择新建工程-从Git新建工程。
我们将仓库的URL复制下来,粘贴到MATLAB源代码管理的窗口中去。然后,点击验证,输入Gitee的用户名和密码,通过验证,我们便可以通过MATLAB访问这个远程库了。需要注意的一点是,我们需要提前创建一个空白文件夹作为我们的工程文件夹。我创建了名为NEWTEST的文件夹,之后便会提示我们,是否要新建NEWTEST工程。我们选择是。
然后我们便会进入新工程配置的界面。
假设我们的工程一共有两个用户自定义文件夹,一个是src,用于存储我们的源代码,另外一个是data,用于存储所用的数据。那么我们先在本地的文件夹中创建两个文件夹,并添加我们的文件。然后在设置工程的窗口中,我们将这两个文件夹添加到工作路径中去。
接下来我们可以设置在打开工程和退出工程的时候所要执行的文件。对于我们来说还用不到这个功能,因此我们空着,直接创建工程。
接下来,在工程窗口中将我们的文件添加到工程中去。
接下来,我们要将这些改动提交并Push到远程库中去。在左侧资源管理器中右键,选择源代码管理,查看并提交更改。
这一个步骤相当于在Git Bash中的如下操作。
git status
git commit
接下来,我们可以看到当前的Git状态。我们可以在写入Comment后点击commit。
这样,我们当前版本的快照便完成了。接下来我们要进行Push,将我们的更改上传到远程库。点击MATLAB上方工具栏中的推送,输入我们Gitee的用户名和密码,稍等片刻,我们的整个工程快照便上传到了Gitee。
另外,Git会保存我们更改的所有历史记录与修订版本。通过上述步骤,我们便能够实现MATLAB Projects的版本控制。