Version control 源代码管理分支需求

Version control 源代码管理分支需求,version-control,Version Control,我们正在开发医院信息系统软件。该项目将因医院而异,包含不同的用例。但很多部分都是一样的。所以我们将使用源代码管理的分支机制。如果我们在一家医院发现了一个bug,我们怎么知道其他分支机构是否有相同的bug 我们附上的图片中的数字显示了每个医院的软件 你有解决这个问题的办法吗 关于这个问题,我们适合使用哪种源代码控制(SVN、Git、Hg) 谢谢 您提到的所有VCS(版本控制系统)都与“共享组件”的概念兼容,它允许您定义一个公共的共享和部署的代码库,以及每个分支中的一些专门化: (见附

我们正在开发医院信息系统软件。该项目将因医院而异,包含不同的用例。但很多部分都是一样的。所以我们将使用源代码管理的分支机制。如果我们在一家医院发现了一个bug,我们怎么知道其他分支机构是否有相同的bug

我们附上的图片中的数字显示了每个医院的软件

你有解决这个问题的办法吗

关于这个问题,我们适合使用哪种源代码控制(SVN、Git、Hg)

谢谢

您提到的所有VCS(版本控制系统)都与“共享组件”的概念兼容,它允许您定义一个公共的共享和部署的代码库,以及每个分支中的一些专门化:

  • (见附件)
考虑到发布管理过程的分布式方面,DVCS更合适。
如果bug位于公共代码库中,您可以在其他分支中快速看到以下情况:

  • 他们所指的通用组件的确切版本
  • 它们引用的是与发现bug的组件相同或更旧的版本(在这种情况下,它们也有可能存在bug)

好的,这不是一个真正的VCS问题,这是一个首要的体系结构问题-您如何构造和构建您的应用程序,使您能够根据需要将特定用例交付给每家医院,同时能够(如您所建议)修复常见代码中的错误

我认为人们可以肯定地说,如果你按照你形象中所建议的模式行事,你将无法始终如一地有效地做到这一点。最终,您将得到许多不同的、离散的应用程序,这些应用程序必须单独维护,即使它们在某些时候来自一组公共代码

很难做出更好的概括,但我会按照以下思路思考:

首先,您需要一个核心应用程序(或一组应用程序或一组应用程序库),这些将构成任何交付系统的基础,因此需要一组单独维护的代码(尽管此核心本身可能包括外部库)

然后,您可以为自定义应用程序(每个医院实例)提供多个选项。您可以通过多种方式定义可用功能:

  • 在一个极端情况下,通过配置——让一个应用程序包含所有代码,并在每个实例的基础上有效地打开和关闭东西
  • 在另一个极端,每个医院都有一个应用程序,该应用程序基本上包含了定制的核心代码
然而,很可能的情况是,虽然每个医院的用例总数不同,但单个用例在许多实例中都是通用的,因此您需要以模块化系统为目标,即从通用核心开始,可以通过组合和任何其他方式进行扩展和配置

这意味着您可能希望广泛使用控制反转和依赖项注入,以便在公共框架内提供灵活性。您想看看可扩展性框架(我喜欢.NET,所以我要看看托管可扩展性框架-MEF),它允许您在运行时而不是在编译时“组装”应用程序

您还需要注意如何部署—特别是如何更新—您的应用程序,在这一点上,您是对的,您需要正确地进行版本控制和构建环境

一旦你知道你将如何构建你的应用程序,那么你就可以看看你的版本控制系统了,@VonC说关键功能是能够将共享项目中的代码包含到多个可交付项目中

如果是我,现在,我可能会有一个核心(可能本身就是多个项目/解决方案),然后每个医院有一个项目/解决方案,但我的目标是在每个医院的项目中拥有尽可能少的代码-理想情况下,刚好有足够的框架来定义特定于实例的配置和UI定制

至于使用哪一个。。。如果您是一家Microsoft商店,那么请仔细研究一下TFS,拥有一个集成良好的环境可以大大提高生产率

否则(在任何情况下),DVCS(Mercurial、Git、Bazaar等)在我看来,随着更为传统的系统的成熟,它们似乎正在获得优势。我认为SVN是一个很好的工具(我使用它,它也很有效),我认为这种开发需要一个中央存储库——不仅仅是因为你需要一个触发持续集成服务器的地方——但是你可以通过DVC实现同样的效果,并且能够在没有任何限制的情况下频繁地进行本地、增量和提交“打破构建”和DVCS给您的灵活性意味着,如果您现在有选择,那么这几乎肯定是一条路要走(但您确实需要确保建立良好的实践,确保代码尽早推送到核心存储库)

我认为,纯粹从风险投资的问题来看,还有很多问题需要解决,但在您知道如何构建交付的解决方案之前,您无法获得有用的细节