在瞬息万变的脚本开发环境中,频繁的更新和协作输入使得保持效率和一致性变得尤为困难。本次演讲将展示 Git 软件在脚本协作方面的强大功能,并提供针对常见问题的解决方案,例如意外删除、版本控制以及手动备份的繁琐。
Git 是团队协作的必备工具,它允许多个贡献者同时处理同一个项目。借助 Git,每次更改都会自动进行版本控制,从而提供强大的历史记录,使团队能够轻松地跟踪、回滚和审查修改。此外,Git 的自动备份功能可确保您的工作实时安全,消除数据丢失的风险,并提高整体效率。
我们希望推广 JMP on Git 的应用。我叫 Britta Silbersack,来自罗氏诊断公司,我的工作是为我们的科学家提供 JMP 脚本解决方案方面的支持。我刚开始从事这项工作时,认识了 Bernd,他当时是罗氏的顾问。现在我们再次见面,一起做了这个演讲。
我叫伯恩德·海宁 (Bernd Heinen)。有些人可能认识我,我曾是 JMP 的高级系统工程师。现在,我是一名顾问,帮助客户理解和应用统计学,或者指导他们使用 JSL。我认识了布里塔 (Britta)。不久前,我们聊起了编程,觉得推广使用 Git 代码库进行 JSL 开发是个好主意。
什么是 Git?Git 是一个分布式版本控制系统。您可以将 JSL 脚本保存到 Git 管理文件夹中,然后可以使用许多功能来帮助您管理脚本,简化您的工作。它会在不同的时间点为您的脚本创建快照。它可以帮助您组织备份、运行版本控制、支持协作以及记录您的工作。
当你独自编程时,可以充分利用 Git 的所有优势。这样一来,你不需要太多的基础设施。建议在远程服务器上保留一份副本以作备份。Git 的真正威力体现在协作环境中。团队成员可以共同开发同一个程序,将各自的程序版本推送到代码仓库,然后合并他们的工作。Git 是所有操作的底层机制,其原生交互是通过命令行界面进行的。但是,有很多插件可以为 Git 提供图形用户界面,甚至可以扩展其功能。
我们想展示一段简短的视频,介绍一个典型的工作流程。这段视频并非Git的培训视频,而是为了激发用户使用Git的兴趣。我们力求做到简短精炼,同时又能提供足够的信息来演示如何使用Git。我们将重点讲解JSL编程、脚本在Git中的注册、快照的概念、仓库的作用,以及如何合并同一脚本的不同版本等内容。
我们先来看看 Britta 的笔记本电脑。她打开 GitLab Cloud,这是 Git 的一个托管选项。她新建了一个群组,然后邀请其他人(比如我)加入。这只需要点击几下鼠标。在这个群组里,她创建了一个名为 TryGit 的空项目。她填写了默认设置,创建了项目,然后复制了链接,回到她的笔记本电脑上继续操作。我们这里使用的是 Git Extensions 的图形用户界面(有很多扩展程序),她粘贴链接后,就可以克隆或复制仓库了。这样,她的笔记本电脑上就创建了一个空的工作区。
现在,她当然是用 JMP 编写 JSL 脚本。完成后,她将其保存到 Git 管理的文件夹中。然后,她创建一个提交(即快照),并将当前状态推送或上传到 GitLab 的 Web 仓库。
现在我们来看看Bernd的笔记本电脑,他使用GitLab远程工作。当我创建工作组时,Bernd收到了一封来自Git的邮件。他很好奇,点击了邮件中的链接访问远程仓库。他查找了项目,当时仓库里还没有任何内容。他复制了链接,并按照相同的步骤操作。他通过SSH加密的URL克隆了仓库,并确定了克隆后的文件应该存放在笔记本电脑的哪个位置。他使用仓库中的文件名作为文件夹名称,然后打开了文件夹。
不出所料,它只显示一个空的工作区。不幸的是,我又接到一个紧急电话,于是我让 Bernd 继续工作。我上传 JSL 代码后,他拉取或下载了该项目的当前状态。他用 JMP 打开它并扩展程序。他将更改保存到同一个文件中。然后他切换到 Git Extension 并创建了一个新分支。这样 Git 就可以跟踪更改。提交或保存当前状态后,Bernd 可以看到程序被添加到了哪里。他还将状态推送到代码仓库。点击“检查”,然后切换到 GitLab。在网页上,可以看到一个新的分支。他将焦点设置到该分支并创建了一个新的合并请求。
在合并请求中,我指定 Britta 为审核人,并给她发送了一条消息。这条消息或相关信息已自动通过电子邮件发送给她。我们现在正在查看她的笔记本电脑。她收到了这封邮件,点击链接进入代码仓库,看到了合并请求。她导航到那里,阅读并确认,最终确认了我的更改。Git 显示了更改发生的位置,合并完成。
现在,两个不同的分支又合并回了主分支。布里塔也重新回到了项目组,我们决定并行处理不同的任务。这次拉取操作为我们两台电脑上的开发奠定了相同的基础。你可以看到,在布里塔的例子中,她创建了一个新分支。这样 Git 就能跟踪她的更改。我在我的电脑上也做了同样的事情——这里没有显示——然后我们继续各自的编程工作,每个人都在各自的程序版本上进行开发。
我们各自提交或创建程序快照。请注意,与前一个快照相比的差异已高亮显示。我们将各自的分支推送到代码仓库。
布里塔用笔记本电脑查看网页上的代码仓库,发现两个分支都在那里。她在自己的分支上添加了一条评论,然后创建了一个合并请求,并指定我为审核人。
伯恩德现在远程办公,他用笔记本电脑上网,打开合并请求并批准了它。他切换到主分支。然后他把程序的新状态拉取到笔记本电脑上,将焦点设置到他的分支,并开始在那里进行合并。他想把主分支合并到他的“Fit a Model”分支上。天哪,冲突了。
还有一些工具可以帮助缓解这种情况。Bernd 使用 meld 工具合并程序的不同版本。在这里你可以看到很多差异。你可以轻松地识别更改、删除重复项、插入一些部分以及复制粘贴其他内容。他保存了不同的更改,再次提交,然后推送。现在我们都可以拉取当前版本的程序,并运行包含两个部分的完整程序。
JMP 用户应该会喜欢的一点是,它能将整个开发过程及其当前状态可视化。虽然它并非 Git 本身的全部功能,但它集成了众多提供 Git 交互式用户界面的工具之一。
总之,Git 设置简单,使用方便。它能轻松实现备份,提供强大的版本控制,并简化与同事协作编写脚本的过程。希望我们至少能让大家对 Git 的用法、优势和易用性有所了解。现在就轮到你开始使用 Git 了,或者最迟回到办公桌后也可以。