数学建模比赛是本、硕学生参加频次较高一个比赛,其奖项也具有一定的含金量。笔者在研究生期间参加过两次华为杯数模,先后得到二等奖和一等奖。本文会结合笔者自身经验,并从一个开发者的角度,分享该以怎样的工作流来提高团队合作的效率。
本文同步发表公众号:QiangZiBro和我的博客https://qiangzibro.com,欢迎关注!
简而言之,笔者推荐的数模合作方式概述为以下四点
- 每人各做1或2道题
- 使用Latex作为论文格式支持,使用VSCode作为论文编辑工具
- 使用Git做版本控制,Github作为同步源
- 在各自分支上进行论文写作,由队长最后合并到主分支
下面,我们来抽枝剥茧地看细节。
1. 每人各做1或2道题
传统的编程+建模+写作三人分工模式将这三样工作割裂开来,造成的问题是编程等建模,写作等编程这样一个尴尬局面。
笔者建议每人都应该具有了解他人工作的能力,不要将几种能力独立开来。
比赛开始时,队友间相互讨论、协商,每人各选一道题,能力强者可以选两题进行求解。毕竟,多人同时求解的多线程操作,不太会造成最后一题没时间做的情况。
2. 使用Latex+VSCode进行你的论文写作
排版是论文最后得分高低的一个重要因素,但也是最令人头疼的问题。建议使用Latex进行论文写作,直接参考模板写作即可。
要使用Latex,需要下载安装支持Latex的Latex编译器。Latex编译器的下载和Latex语法网上有大量教学,这里不再赘述。在你的电脑下载安装Latex编译器后,能够将Latex文本转为PDF文本。
使用VSCode进行Latex文本编辑。在VSCode这个神奇的编辑器中,有个叫Latex Workshop的插件,能调用Latex编译器一键编译并显示PDF文件。建议参考南开大学程明明老师的学术论文写作[1]了解详细操作,也可参考[3]。
使用Latex还有一个好处是,便于做版本控制。不像Word,Latex文件本身是纯文本,能够轻松地做版本控制。
关于数学建模的Latex模板,网上有很多,以2020研究生数学建模为例[2]
1 | git clone https://github.com/latexstudio/GMCMthesis |
笔者在2020年数学建模用的就是这个模板,在Windows下可以直接使用,在Mac下的VSCode编译时,自动提醒我下载了两种字体后,才能使用。
3. 使用Git做版本控制
为什么要做版本控制?讲个恐怖故事:小明在比赛结束前一天将辛辛苦苦写的论文误删除了,并且是不可恢复的删除,于是小明顶着崩溃的心情在最后的时间又重写了一篇出来。
这个故事是真的,就发生在我身边。
由此可见版本控制+多地存储的重要性。使用Git对每一次小改动做提交,并及时push到你的Github或者Gitee仓库,就算你的电脑烧了也能从远程找回些东西出来。
4. 多人协作分支策略
使用Git多分支管理,共同协作一个私有的Github/Gitee仓库。主分支(master或者main分支)作为稳定的最终版本,每人在初始点的模板引出一个分支,并推到自己的分支上,由一人做最后的分支合并。
具体流程如下,比如我是队长,同时要写文章,用下列命令,从模板新引出一个分支出来
1 | git checkout -b dev_captain |
队员小明也引出一个分支
1 | git checkout -b dev_ming |
假设模板如下
1 | ## chapter 1 |
在分支dev_captain
上,我对第1,3章节做了大量修改后,并push到自己的远程分支
1 | ## chapter 1 |
在分支dev_ming
上,小明也对第2章节进行大量修改
1 | ## chapter 1 |
将这两份内容直接合并到主分支非常简单,因为我们只在自己的对应章节进行了更新,Git能够自动将其合并成一个整体。例如,分支管理者进行操作如下:
1 | git fetch -a # 从远程更新 |
再次看我们点的论文,也就变成了
1 | ## chapter 1 |
分支冲突
遇到分支冲突不要怕,首先要明白为什么会有分支冲突:两个分支版本在同一块区域进行了不同的改动,Git不能确定到底要保留哪块内容,于是要求你改完后再次进行提交。还是上面的例子,我在reference
章节下添加了两个参考
1 | ... |
小明在reference
章节下也添加了两个参考
1 | ... |
将两个分支合并到主分支时,出现
1 | Auto-merging example.txt |
这意味着产生了冲突,打开这个文件
1 | ... |
可以看到<<<<<<< HEAD
和>>>>>>> dev1
中间包围的部分就是冲突内容,=======
上下是各自分支的内容。我们将这个区域的内容改成我们想要的样子,比如说想要1、2、3,那就只需要删掉重复的- refer 1
1 | <<<<<<< HEAD |
再微调一下,并删掉<<<<<<< HEAD
,>>>>>>> dev_captain
和=======
,如下
1 | - refer 1 |
再次提交
1 | git add . |
至此,分支冲突解决。
课后作业:多人合作有时候会产生合并冲突,你会采取怎样约束,让冲突少产生、或者不产生?
Hint:
- 本文提供的Latex模板仓库,没有忽略掉编译产生的中间文件,这些文件不应该被提交
- Git能够自动识别合并不同区域
也许没有完美的方法,但一定有更适合你们的方法,希望本文能给即将参加数学建模的你们带来帮助,祝好运✨
参考
[ 1 ] : https://mmcheng.net/writing/
[ 2 ] : https://github.com/latexstudio/GMCMthesis
[ 3 ] : https://zhuanlan.zhihu.com/p/38178015