版本控制系统建议

时间:2019-09-09 08:23:36

标签: version-control

我正在维护一个基于Web的系统,该系统与许多文件和功能一样庞大,并且现在其他人也将在该系统上工作。这是一个内部企业解决方案,因此对于如何设置它有一些希望:

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

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

我已经通过中央回购调查了Mercurial,但不确定是否可行。

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

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

2 个答案:

答案 0 :(得分:0)

最好的组合是:

  • 所有代码存储库的git

既然您选择使用git,则有两种流行的只读访问方式:

  • 编写者依赖项(如果是前端Web应用程序,则为yarn)
  • 子模块

不可能撤消对某些文件的访问并且仍在运行网站。但是如果您想防止WRITE,则可以使用单独的存储库或子模块。我通常更喜欢将整个应用程序拆分为单独的git repos,然后通过composer依赖项将它们链接起来。

注意:您没有说明编写的Web应用程序是什么,所以我讲了PHP Web应用程序通常是如何完成的。

答案 1 :(得分:0)

从技术上讲,根据应用程序“模块化结构”的通用概念(就将源树的部分分成独立的存储库而言),您至少有3种解决方案(Git会最弱和最la脚): / p>

  • 使用子模块进行Git(没有ACL,很难自托管,没有“轻松协作”)
  • 带外部功能的SVN(从存储库到单个文件级别的ACL,易于自托管,但具有普通的合并地狱和其他一些众所周知的弱点)
  • 带有子存储库的商品(良好的ACL,相当有用的自我托管,即使对于新手也很容易学习,但是名气和合格用户数量却较少)