通过Git实现MATLAB Projects中的版本控制

版本控制是什么

什么是“版本管理”或“版本控制”?我为什么要关心它呢?如果你是一位软件工程师,那么一般你需要备份从项目开始到成果发布过程的所有修订版本,在这种情况下选用版本控制系统(VCS)将是一个明智的选择。通过保存在项目开发过程中的所有修订版本,你可以随时将项目回滚到某一历史版本,也可以随时对于不同版本之间的差异进行比对。通过版本控制,你可以进行问题溯源,找出某一问题的罪魁祸首是哪一位工程师,问题出现在项目的哪一个版本。另外,假如你的本地文件由于某种奇怪的因素遭受了破坏,例如硬盘进水等,你可以随时恢复原来的样子,只要你向远程仓库提交过最新的项目版本,那么所有的代码、文件都会被保存下来。

Git是什么

版本控制系统有很多种类。最原始的状态是本地版本控制系统,你可以在电脑硬盘上开辟一块区域作为你的项目仓库,在每次更改后都保存一次最新的文件到仓库里去。这种版本控制的方法应用极为广泛,从PCB绘制工具Altium Designer到Windows系统,你都可以看到本地版本控制系统的踪迹。当项目出现多人协作需求时,集中化版本控制系统(Centralized VCS)应运而生。这种版本控制系统的原理是,所有的历史文件都被保存在中央服务器的硬盘中,开发者从中央服务器同步时只下载项目的最新版本。这种方案的缺点在于,假如中央服务器的硬盘出现故障,那么所有的历史文件都将丢失,只有开发者手中的最新版本项目文件得以保留。

Git是一种分布式版本控制系统。分布式版本控制系统与集中式版本控制系统的最大区别在于,所有的开发者手上都有完整的历史文件镜像,并且每一次同步都将获得所有项目历史修订记录。这种方案的最大好处在于,对于一个小规模的工程,开发者可以掌握项目开发的所有过程,工程文件的安全性也得到了保证。但是,在每个开发者的终端上备份完整的历史文件镜像必然不适合大规模的工程。

在MATLAB中使用Git

打开MATLAB R2019b,在命令行窗口中输入

!git

假如出现以下一大段文字,说明系统已经安装好Git,且MATLAB可以正确调用Git。

输入!git之后,MATLAB应该返回一大串提示

倘若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安装程序截图,默认使用Vim编辑器
选中Use Git from the Windows Command Prompt,你就可以在cmd中调用Git

安装完毕后,你可以看到桌面上出现了Git Bash,鼠标右键也能够看见Git Bash Here和Git GUI Here选项,分别是在当前文件夹启动Git Bash和Git GUI功能。


Git GUI Here会进入图形化工具界面,Git Bash Here会进入命令行工具界面

配置Git

我们点击Git Bash Here按钮,进入命令行工具界面。


我在桌面文件夹路径下进入了Git Bash

由于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命令行窗口。


进入GITTEST文件夹

1. 创建项目

假设我们要创建一个叫做learngit的项目,并且要使得Git Bash进入到learngit文件夹,那么输入以下语句

mkdir learngit    //创建learngit文件夹

cd learngit    //进入learngit文件夹

pwd    //显示当前的项目路径

然后我们在当前文件夹中新建一个文件,test.txt


新建文本文档test.txt

2. 忽略文件

有时候我们的代码生成工具会自动生成一些报告,而这些报告可能是我们不需要加入到Git中去的,因此我们可以设置一个忽略文件,将不需要的文件写在忽略文件中。


nouse.txt代表不需要被添加到Git中的文件


在.gitignore文件中写入不需要的文件

3. 初始化仓库

将文件整理好之后,我们要进行仓库的建立。在Git Bash中输入语句

git init

我们可以看到,在当前工作目录下,一个.git文件夹被创建了。这个文件夹就是我们的repository,也就是Git仓库。平时尽量不要去碰这个仓库的文件,否则有可能破坏Git的正常工作。


我们在工作路径下创建了.git文件夹,作为本地Git仓库

我们确认一下仓库确实将我们的文件包含在内了,输入语句

ls -ah


使用ls -ah查看.git文件夹内包含的文件

4. 检查Git状态

在执行其他操作之前,我们先检查一下当前Git处于什么状态。

输入语句

git status


输入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 GUI中可以看到Git的历史记录,里面记录有每次提交的Description

或者你也可以在Git Bash中查看历史记录,只不过效果没有那么好。输入语句

git log


在Git Bash中查看历史记录

6. 尝试进行第二次提交

现在我修改了test.txt中的内容,想要对Git仓库进行更新。那么我只需要执行和上面一样的操作就可以了。首先我们先看一下git status发生了什么变化。


Git检测到了文件发生了变更

那么我们先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新建工程。


从Git新建工程

我们将仓库的URL复制下来,粘贴到MATLAB源代码管理的窗口中去。然后,点击验证,输入Gitee的用户名和密码,通过验证,我们便可以通过MATLAB访问这个远程库了。需要注意的一点是,我们需要提前创建一个空白文件夹作为我们的工程文件夹。我创建了名为NEWTEST的文件夹,之后便会提示我们,是否要新建NEWTEST工程。我们选择是。


关联远程仓库


创建新MATLAB工程

然后我们便会进入新工程配置的界面。


设置新工程

假设我们的工程一共有两个用户自定义文件夹,一个是src,用于存储我们的源代码,另外一个是data,用于存储所用的数据。那么我们先在本地的文件夹中创建两个文件夹,并添加我们的文件。然后在设置工程的窗口中,我们将这两个文件夹添加到工作路径中去。


添加资源文件夹

接下来我们可以设置在打开工程和退出工程的时候所要执行的文件。对于我们来说还用不到这个功能,因此我们空着,直接创建工程。

设置工程文件打开和关闭时自动进行的操作

接下来,在工程窗口中将我们的文件添加到工程中去。

添加文件


可以看到,文件被成功添加到工程中去了

接下来,我们要将这些改动提交并Push到远程库中去。在左侧资源管理器中右键,选择源代码管理,查看并提交更改。


查看并提交更改

这一个步骤相当于在Git Bash中的如下操作。

git status

git commit

接下来,我们可以看到当前的Git状态。我们可以在写入Comment后点击commit。

查看并提交更改

这样,我们当前版本的快照便完成了。接下来我们要进行Push,将我们的更改上传到远程库。点击MATLAB上方工具栏中的推送,输入我们Gitee的用户名和密码,稍等片刻,我们的整个工程快照便上传到了Gitee。

Gitee上的远程库便得到了更新

另外,Git会保存我们更改的所有历史记录与修订版本。通过上述步骤,我们便能够实现MATLAB Projects的版本控制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 第1章 Shell和vi 1.1什么是shell 在计算机科学中,Shell俗称壳,用来区别于Kernel(核),...
    福尔摩鸡阅读 854评论 0 1
  • 一 Git配置和仓库初始化 下面会介绍Git的使用,每个小节里会讲解各个功能在命令行中的实现方式,并在每小节的最后...
    Happioo阅读 3,320评论 0 5
  • Git和Github学习 1.创建版本库 安装git,至于这个话题就不细说了,按照你电脑的操作系统下载一个合适的g...
    郭子web阅读 366评论 0 0
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,396评论 0 7
  • 体检偶遇老红军 前天去长征医院体检,偶遇了一位老红军。老人出生于1926年,今年91岁(比我已过世多年的爷爷还大两...
    jinglan0379阅读 197评论 0 0