首页 > 解决方案 > 版本控制系统建议

问题描述

我正在维护一个基于 Web 的系统,该系统在很多文件和功能中都相当大,现在是时候让其他人也开始使用它了。这是一个内部企业解决方案,因此有一些关于如何设置的愿望:

  1. 我正在寻找一个版本控制系统,它允许程序员以一种简单的方式进行协作
  2. 用户不应访问某些文件夹(例如某些模块)
  3. 我希望它在一个中心位置自托管,因此有一个地方拥有最新版本的系统。
  4. 我已经有一个更新系统来查找文件和数据库结构之间的差异,并将这些更改应用于需要更新的目标网站。
  5. 我已经有一个基于 Web 的编程环境,它可以直接更改服务器上的文件并将已保存文件的副本保存在数据库中以用于撤消和差异目的。这种方法不允许在分支上工作,然后再推送它们,这意味着只要整个系统不处于“生产就绪”状态,就不能发布任何更新。

什么是明智的解决方案?据我所知,git 没有对特定文件和文件夹的访问控制。我也不喜欢自由职业者下载整个 repo 只是为了更改一些文件的想法(他们可能会窃取整个系统)

我已经通过中央回购研究了 mercurial,但不确定这是否可行。

任何建议都将受到高度赞赏。

编辑:应用程序是用 PHP 编写的。

标签: version-control

解决方案


从技术上讲,您至少有 3 个解决方案(Git 将是最弱和最蹩脚的),基于您的应用程序的“模块化结构”的常见概念(就源树的分离部分到独立存储库而言):

  • 带有子模块的 Git(没有 ACL,相当困难的自托管,没有“以简单的方式协作”)
  • 带有外部的 SVN(从 repo 到单个文件级别的 ACL,易于自托管,但普通的合并地狱和其他一些众所周知的弱点)
  • 带有 subrepos 的 Mercurial(良好的 ACL,相当可用的自托管,即使对于新手来说也很容易学习,但名气和合格用户的数量较少)

推荐阅读