前言
最近用Matlab写了一个用于分析神经电生理数据的图形用户界面(GUI,现在在Matlab里称为App)。之前写小鼠脑机接口实验程序用过Git将整个项目保存在Git-hub,当时并未写下任何博客以记录整个过程。这次,我想直接在Matlab里使用Git以备份和进行程序开发,遇到不少问题,故写博客将整个过程记录下来,以促进自己学习,并与网友分享。这里面许多内容都是参考了网上搜索到的解决办法,可以视为各种资源的集合,当然也有我一些个人粗见。
一、了解Git
这方面的文章太多了,目前并不非常明白,待有所心得再写。
二、具体步骤
1. Github上 新建一个库并连接到本地
2. Matlab 里进行相关配置
- 注意:为了让Matlab能够记住账户和密码,你需要使用Git的凭据助手(Credential Manager Core),在安装Git for windows时,在安装程序的 Choose a credential helper 部分中,选择 Git Credential Manager Core 作为凭据助手。
- 根据Matlab提示,我们需要用 Git 把一些非代码文件注册为二进制文件以避免文件损坏,如.Fig, .mat, .mexw64, .mlapp,.p等等。据称 “如果不注册这些扩展名,则当您通过更改行尾字符、扩展标记、替换关键字或尝试自动合并来提交文件时,这些工具可能会损坏您的文件。不论您是在 MATLAB 外部使用该源代码管理工具,还是在未先注册文件格式的前提下尝试从 MATLAB 提交文件,都可能发生损坏。”这些配置都在.gitattributes 文件中,一般在创建工程时会自动生成,你也可以用如下代码生成。
copyfile(fullfile(matlabroot,'toolbox','shared','cmlink','git','auxiliary_files', ...
'mwgitattributes'),fullfile(pwd,'.gitattributes'))
- Matlab也需要配置SSH公钥来避免HTTP访问所带来的频繁验证提示。这里我们需要能够在Matlab命令行使用Git,我已经安装了git for windows,然而!git运行并不成功,提示并未找到。后来发现,安装好后,需要重启Matlab。
!git
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--config-env=<name>=<envvar>] <command> [<args>]
...
成功!
4)接下来我们来配置公钥:
matlab帮助文件给的方法,我没有成功,sigh。试了下面链接里的方法:https://blog.csdn.net/qq_35621494/article/details/106959349
注意:Matlab 2021a之前的版本不支持shh-keygen默认生成的openSSH密钥。好在我的是2023a。
因为在Matlab里使用,故需要保证Matlab能检测到密钥文件。
getenv('useprofile')
'C:\Users\yao11'
Matlab里运行上述命令。确保密钥文件放在这个目录下的“.ssh”文件夹里。
git = settings().matlab.sourcecontrol.git;
git.PrivateKeyFile.PersonalValue = "~/.ssh/id_rsa";
git.PublicKeyFile.PersonalValue = "~/.ssh/id_rsa.pub";
接着在matlab 的 command window 里运行上述命令以修改设置让matlab能检测到密钥文件。
3. 上传文件.
设置好以后,就可以选择文件点击右键或者工作目录的空白处点击右键以进行源代码管理了。你也可以在matlab命令行输入!git 命令来操作。此处不在赘述。
!git add . % 添加至暂存区
!git commit -m "add to repository" % 添加至本地库
!git push % 同步至远程库
总结
第一次在博客里记录解决问题的过程,感觉加深了对于问题了理解,以后会养成这个习惯,多多写作,算是做笔记吧。对于Git这个工具不是很熟练,之后多学习学习再写一个详细的学习笔记。