Application design 在自定义编辑器应用程序中嵌入哪种源代码管理范例和解决方案?

Application design 在自定义编辑器应用程序中嵌入哪种源代码管理范例和解决方案?,application-design,version-control,Application Design,Version Control,我正在构建一个管理大量自定义对象的应用程序,这些对象可以由多个用户同时编辑(使用应用程序的不同实例)。这些对象有一个底层的序列化表示,我的计划是(通过我的应用程序UI)在外部源代码管理系统中持久化它们。当然,这意味着我的应用程序可以检查对象的当前版本是否有更新,以及每个对象的合并接口等 我的问题是要支持什么样的源代码管理范式和特定的解决方案,以及为什么。我(也许天真地)看待源代码管理世界的方式有三种普遍的范例: 单一存储库,锁定访问(MS SourceSafe) 单个存储库,并发访问(CVS/S

我正在构建一个管理大量自定义对象的应用程序,这些对象可以由多个用户同时编辑(使用应用程序的不同实例)。这些对象有一个底层的序列化表示,我的计划是(通过我的应用程序UI)在外部源代码管理系统中持久化它们。当然,这意味着我的应用程序可以检查对象的当前版本是否有更新,以及每个对象的合并接口等

我的问题是要支持什么样的源代码管理范式和特定的解决方案,以及为什么。我(也许天真地)看待源代码管理世界的方式有三种普遍的范例:

  • 单一存储库,锁定访问(MS SourceSafe)
  • 单个存储库,并发访问(CVS/SVN)
  • 分布式(Mercurial,Git)
  • 我已经有好几年没有听说有人使用#1了,所以我打算完全不考虑这个案例(除非我得到一个令人信服的论点)。但是,我不知道是支持#2还是#3,以及支持哪些具体实现。我担心使用范例的细微差别,以至于我无法在单个UI中充分捕获基本操作

    我要传达的最后一点信息是,此应用程序打算部署在商业环境中,其中可能已经在使用源代码管理系统。我宁愿不支持一个以上的解决方案,除非它真的是一个交易破坏者,所以在企业环境中广泛采用是一个加号

    更新: 我特别想找几个理由:

  • 哪种范式是有意义的,因为它是商业上被接受的?(我认为这一点已由@Andrew Colson回答,但其他人的经验可能有所不同)
  • 一个普通的商业开发商店宁愿使用现有的源代码管理系统,而不是为我的应用程序维护第二个源代码管理系统,这是一个合理的假设吗(假设我的应用程序满足了与正常开发过程相分离的非琐碎需求)
  • 出于我的需要,我是否正确地假设#2和#3不能合理地包含在一组操作中,而不会扭曲其中一个范例
  • 对于您认为我应该使用的范例,您认为哪些具体实现对支持至关重要

  • 如果您希望获得广泛的商业支持,那么您目前更关注的是2而不是3(甚至可能是1)

    编辑: 当然,这取决于您所说的“商业”是什么意思,但大型商业组织往往在开发人员工具方面落后。我主要看到了每个项目/组的SCM,但我确信技术含量较低的商业组织可能只使用其IT组提供的单个SCM解决方案。

    2和/或3

    #1
    单一存储库,锁定访问-现在很少使用,因此它们不值得一提

    #2
    单一存储库、并发访问-被称为VCS或CVCS(集中式版本控制系统)仍在广泛使用

    #3
    分布式系统是下一个重要的东西,因为它们消除了其他系统强加给开发人员的许多人为障碍

    首先,回答您的问题/顾虑:

    1.
    商业验收取决于组织及其开发人员。如果管理者是负责所使用软件的人,他们倾向于在几乎没有实际证据的情况下采取强硬的保守决策,那么他们可能会默认微软提供的任何服务。在这种情况下,祝你好运。我所听到的关于MS版本控制(特别是SourceSafe)的一切都是坏事,我不确定MS是否有DVCS选项

    OTOH,如果开发团队负责挑选他们的工具(或者管理者思想开放),那么git或mercurial可能是最好的选择。git将是一个很难适应的问题,因为它太复杂了。mercurial是从CVCS的一个非常简单的过渡,请务必下载OrtoisehgGUI客户端,以了解工作流。两者都是完全稳定的,可以生产。Mercurial和Subversion在Sourceforge.net以及Google代码上使用,这两种代码都承载了数千个项目。他们可能有任何缺陷,他们要么知道,要么已经解决

    2.
    当我说“在这个时代,运行自己的版本控制系统是对时间和精力的荒谬浪费”时,我很肯定我代表了开发人员的整体观点

    当然,您可能会制作一个小型的、适合您的应用程序的专用版本控制系统;但是,在你决定之前,考虑所有的时间和努力。更不用说,您需要将版本控制系统的代码置于版本控制之下。努夫说

    3.
    不,你不需要,你可以同时使用这两种工具。许多人使用CVCS(通常是subversion)在组织范围内进行集中版本控制,同时使用DVCS在本地进行小规模或单独的开发(甚至有报道称微软工程师在他们的开发人员小组中秘密使用git)。由于DVCS在文件系统中仅由一个隐藏文件夹和一个忽略文件表示,因此很容易将所有信息添加到CVCS忽略文件中,这样就不会在中央存储库中跟踪信息。很简单,如果有必要,你可以利用两者的优势

    我认为,在您提交DVCS时,甚至有方法将DVCS的提交历史传输到CVCS。虽然,我不知道具体怎么做,因为我从来没有理由这么做

    4.
    2和/或3

    如果已经有了CVCS,并且您希望使用它,我会说两者

    Subversion可能可以做任何事情,但问题是,CVCS的所有版本历史都是kep