如何在大型LotusNotes项目中合并版本控制(Git)

如何在大型LotusNotes项目中合并版本控制(Git),git,deployment,version-control,lotus-notes,Git,Deployment,Version Control,Lotus Notes,我们正在维护一个基于LotusNotes的大型网站,该网站运行在DominoServer8.5.3上。最近我们已经厌倦了我们项目中缺乏源代码控制,所以我们想我们应该试着把事情搞得更复杂一些。但如何做到这一点呢 由于各种原因,我将不在这里介绍,我们不能在开发PC上本地运行我们的应用程序。我们只能在开发、暂存和生产服务器上运行它们。(不幸的是,在开发PC上运行的本地Domino服务器不是一个选项。) 这个数字说明了目前的情况: 在生产(和登台)中,有多个网站都具有相同的功能。他们基本上是同一个网站

我们正在维护一个基于LotusNotes的大型网站,该网站运行在DominoServer8.5.3上。最近我们已经厌倦了我们项目中缺乏源代码控制,所以我们想我们应该试着把事情搞得更复杂一些。但如何做到这一点呢

由于各种原因,我将不在这里介绍,我们不能在开发PC上本地运行我们的应用程序。我们只能在开发、暂存和生产服务器上运行它们。(不幸的是,在开发PC上运行的本地Domino服务器不是一个选项。)

这个数字说明了目前的情况:

在生产(和登台)中,有多个网站都具有相同的功能。他们基本上是同一个网站,设计相同,但内容不同。每个站点都包含许多Notes数据库(新闻、档案、讨论等)。这些数据库的设计对于所有站点都是相同的,因此它们都从同一组主模板(NewsTemplate、ArchiveTemplate、DiscussionTemplate等)继承其设计

主模板的一组副本驻留在开发服务器上。当我们部署新功能时,所需的代码更改将添加到Dev.server上的模板中(下面将详细介绍这一点)。然后将这些模板复制到登台服务器进行测试,最后复制到生产服务器。这部分很好用

问题可以在图的下半部分找到。我们目前是两名开发人员,我们都在开发服务器上的同一组开发数据库(新闻、归档、讨论等)中工作。当然,我们总是被彼此的工作绊倒,这很令人沮丧。当需要部署时,将要部署的代码有选择地从开发数据库集中复制/粘贴到开发模板中。这是手动完成的,因此出错的风险很高。我们不能简单地用dev.数据库的设计替换模板的设计,因为dev.数据库始终包含正在开发的代码。因此,我们必须非常注意只部署“已完成”的代码。而且,我们没有变化的历史。这是一种可怕的、可怕的、可怕的(添加您认为合适的许多可怕的东西)软件开发方法,我们知道这一点


现在,使用Git、本地副本、数据库副本等,实现更精简的开发和部署方案的最佳方法是什么?

此图说明了解决此问题的可能方法:

如前所述,每个开发人员都应该拥有自己的数据库/模板副本(而不是副本)(或者在我们的例子中是一组模板)来进行开发。因此,在每个dev.PC上都有一组模板,每个模板都与磁盘上的项目同步。磁盘上项目集将受Git的源代码控制

开发人员将无法在本地运行应用程序,因此他需要在开发服务器上安装一组测试数据库。每个开发人员将有一个这样的集合。测试数据库将从开发人员PC上的模板继承其设计。因此,为了测试其代码更改,开发人员必须使用其模板(驻留在其PC上)刷新其指定测试数据库集的设计

每个开发人员的工作流程如下:

  • 在开发人员自己的PC上对模板集进行代码更改。通过刷新开发服务器上测试数据库的设计,不断进行测试。与磁盘上项目同步,“随意”提交和分支
  • 当开发人员准备推送到远程Git repo时:

    a) 从远程Git repo获取更改

    c) 将更改推送到远程Git repo。将数据库与磁盘上项目同步

    d) 如果当前在开发分支上:将开发服务器上模板集的设计替换为开发PC上模板集的设计。这将确保远程Git repo的开发分支始终与开发服务器上的模板一致,即使它们之间没有直接连接

  • 从这里,通过从开发服务器复制模板,可以将更改部署到暂存和生产中。在部署到生产环境之前,开发分支应该合并到主分支中,以便主分支始终反映当前的生产版本

  • 如果有人有任何意见、补充或反对意见,我很乐意听取

    编辑: 为了缩短上面第1点中的反馈循环,可以直接在开发服务器上的测试数据库中进行开发。这样就不需要在每次需要测试更改时都刷新测试数据库的设计,尽管您必须小心地定期将所有更改复制回dev.模板,以确保代码安全并更新Git repo。这可以通过做一个简单的测试来快速完成。这也是一个机会,在做出承诺之前回顾您的更改,这是一个非常好的习惯


    将更改复制回模板的另一个选项是使dev.server上的测试数据库成为主模板,并临时将dev.PC上的模板设置为从该主模板继承设计。然后可以使用dev.PC模板上的“刷新设计”复制更改,然后可以再次删除继承。

    这是一个很好的概念。我们在Git上遵循相同的模式-但是,我们在每台开发人员计算机(在VM中)上安装了本地开发服务器,以运行和测试应用程序;-)是的,我希望我们可以使用本地开发服务器。不幸的是,我们的客户不会允许。我希望您与分公司合作。因此,开发人员可以处理他们的更改并对其进行测试。在那之后,开发者分支可以合并到开发分支中,把所有的人都聚集在一起。是的,这就是我们的想法,直到现在我们都非常怀念这个想法