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

Øys*_*ren 8 git deployment version-control lotus-notes

我们正在维护一个基于Lotus Notes的大型网站,该网站在Domino Server 8.5.3上运行.最近我们厌倦了我们项目中缺乏源代码控制,所以我们认为我们会尝试一点点改进.但是怎么做呢?

由于我不会在这里讨论的各种原因,我们无法在开发PC上本地运行我们的应用程序.我们只能在开发,登台和生产服务器上运行它们.(不幸的是,在开发PC上运行的本地Domino服务器不是一种选择.)

该图说明了目前的情况:

现在的情况. 哦,恐怖......

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

主模板的一组副本驻留在开发服务器上.部署新功能时,所需的代码更改将添加到Dev上的模板中.服务器(更多细节见下文).然后将这些模板复制到Staging服务器进行测试,最后复制到生产服务器.这部分效果很好.

这些问题可以在图的下半部分找到.我们目前是两个开发人员,我们都在同一组开发人员中工作.开发中的数据库(新闻,档案,讨论等).服务器.当然,我们一直在绊倒彼此的工作,这非常令人沮丧.在部署时,将从dev集合中有选择地复制/粘贴要部署的代码.数据库到开发者.模板.这是手动完成的,因此出错的风险很高.我们不能简单地用dev的模板替换模板的设计.数据库,因为开发.数据库始终包含正在开发的代码.所以我们必须非常谨慎地只部署"完成"的代码.此外,我们没有变化的历史.这是一个可怕的,可怕的,

现在,使用Git,本地副本,数据库副本或诸如此类,什么是实现更简化的开发和部署方案的最佳方法?

Øys*_*ren 5

该图说明了该问题的可能解决方案:

设想的部署架构结合了Git进行版本控制

正如这里所解释的那样,每个开发人员都应该有自己的数据库/模板(或我们的模板集)的COPY(不是副本)来开发.所以在每个开发人员.PC有一组模板,每个模板与磁盘项目同步.这套磁盘项目将由Git进行源代码控制.

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

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

  1. 在开发人员自己的PC上对模板集进行代码更改.通过刷新dev上的测试数据库的设计来持续测试.服务器.与磁盘项目同步,"随意"提交和分支.
  2. 当开发人员准备推送到远程Git仓库时:

    a)从远程Git仓库中提取更改.

    c)将更改推送到远程Git仓库.使用磁盘项目同步数据库.

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

  3. 从这里开始,可以通过从dev复制模板将更改部署到分段和生产.服务器.在部署到生产之前,应将开发分支合并到分支中,以便master始终反映当前的生产版本.

如果有人有任何评论,补充或反对意见,我很乐意听到他们的意见.

编辑: 为了缩短上面第1点中的反馈循环,可以直接在dev上的测试数据库中进行开发.服务器.这样就无需在每次需要测试更改时刷新测试数据库的设计,但必须小心将所有更改复制回开发人员.定期模板以保证代码安全并保持Git repo更新.通过对数据库和模板进行逐元素比较,可以非常快速地完成此操作.这也是一个在提交之前检查您的更改的机会,这是一个非常好的习惯.

将更改复制回模板的另一个选项是在dev上创建测试数据库.服务器主模板并临时在dev上设置模板.PC从该主模板继承设计.然后可以使用dev上的"Refresh design"复制更改.PC的模板,之后您可以再次删除继承.

  • 你肯定想看看GitFlow(例如http://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/,http://nvie.com/posts/ a-successful-git-branching-model /和https://www.atlassian.com/git).我完全同意Christian的意见,你想为每个开发人员使用分支(GitFlow中的功能). (2认同)