我们的公司规模相当小(3-4 名程序员和 3-4 名网站设计师),开发单一用途的 PHP Web 应用程序,为大约 100 多个网站提供功能。我们在独立的开发和生产环境中运营了几年,效果相当不错。一直有足够多的独立功能需要开发,程序员之间从未真正发生过冲突,而且没有源代码控制工作更方便;尽管这有数据丢失的风险,而且我们曾有过在无意移动中丢失大量文件的经历。
另一个考虑因素是我们的设计师不懂技术(我向他们介绍了 HTML 标记,而不是使用所见即所得)。这是犹豫是否转向版本控制的原因之一。
然而,现在我们已经拥有 100 多个站点,开发团队也在不断壮大,我正在尝试标准化我们的程序,对于程序员来说,源代码控制似乎是一个合乎逻辑的步骤。我希望这也能加快我们的补丁部署速度。
不幸的是,我设置源代码控制系统的经验非常有限。我很想听听有类似设置或切换经验的人的意见:
1) 您是否对所有内容(网站、css、html 模板和应用程序代码)进行版本控制,从而迫使设计人员学习版本控制?还是只有开发人员负责处理应用程序代码?
2) 最初设置源代码控制时需要注意哪些陷阱?
3)部署 dev => 生产提示以进行源代码控制。
感谢您的所有见解。
编辑 1:该死。到目前为止,每个人都建议控制一切。这会让我早早脱发。这可能会在不久的将来引发一个新问题。感谢您迄今为止提供的建议,继续加油!
编辑 2:很多很好的答案,我们将研究各种版本控制系统。感谢大家的回复!
答案1
对所有内容进行版本控制非常有帮助,甚至对设计师也是如此。如果实施得当并经过良好的培训,我认为他们会发现这样做的好处多于负担。
如果你刚刚开始,我强烈建议你使用分布式版本控制系统喜欢git或者水银的。这是世界范围内的普遍趋势,而且有很多优点。它很容易在离线模式下工作,没有网络依赖,并且能够在版本控制下进行私人、未打磨的工作,在准备好时集中检查所有内容。
并且,不要诉诸权威或其他什么,而是看看 Joel Spolsky就该话题发表看法(精选引文:“Subversion = 水蛭。Mercurial 和 Git = 抗生素。”)除此之外,他还提出了一个有趣的观点,即这些新系统使用了一种新的思维模型,不同于传统的版本控制——这就是为什么从一开始就采用这种方法是一种胜利。
答案2
我想说把所有东西都放在版本控制下。一旦一切正常,您就可以将其复制到标签中,对于大多数 SCM 系统来说,这不需要服务器上的大量磁盘空间。
至于最初的陷阱,你不必太担心;将所有内容提交给服务器,如果不正确,你可以将其重新排列,然后稍后删除多余的内容。我唯一不会提交的是从源代码构建的工件,即 Java 代码文件属于版本控制,但不属于编译类或“从源代码构建”二进制文件的整个 ISO/DVD。
从开发到生产很容易,在每个主要里程碑创建一个分支。版本控制系统中的目录布局通常如下所示:
/主干/项目/分支/项目/版本1/分支/项目/版本2/分支/项目/版本3
假设您在产品的版本 2 中发现了一个错误,您可以导航到该分支,修复它并发布版本 2.1。与此同时,您正在为新版本 4 处理 /trunk/project 文件夹,您可以自行决定向后和向前合并哪些功能。
不要让 SCM 的狂热爱好者欺骗你,目前流行的版本控制系统 Subversion 和 Git 之间的功能差异非常小。对于你的团队来说,最重要的是这些服务器如何与你现有的工具很好地集成。我也不喜欢所见即所得,但拥有与服务器兼容的 eclipse-php 或其他 IDE 确实很好。
答案3
我是一名开发人员,之前曾从事过 IT 管理工作。
回答您的具体问题:
1)是的,对所有内容进行版本控制。
2)建议您设置一个虚拟版本控制存储库和虚拟项目供人们学习。
3) 标记投入生产的版本,甚至是试用版。然后,您可以随时检查某人正在运行的特定版本。
我看到您已将问题标记为 CVS。
我的建议是认真考虑一下 subversion,结合 TortoiseSVN 会非常容易使用。此外还有一个 TortoiseCVS。
我建议你运行一个内部版本控制教程。如果你的开发人员/设计师以前没有遇到过这个问题,我会感到惊讶。Tortoise 让它变得非常用户友好。
将其中一个 Web 界面安装到 cvs 或 subversion 中也会很有益处。
我建议使用 subversion 而不是 CVS 的原因是,虽然 CVS 非常好,但它存在一些严重的设计和实现问题。对我来说,最大的问题是:1) 您无法对目录进行版本控制 2) 二进制文件处理不太好,因为很多东西默认为文本。3) 没有原子提交。4) 我记得它经常弄乱并留下锁定文件,我必须手动从代码存储中删除它们。这样做有损坏的空间,因为您 rm 锁定文件。5) SSL 支持和管理用户/密码
Subversion 基本上解决了所有这些问题,可能还有很多其他问题。它还有很多高级功能,比如外部功能(我确实在使用)。它还可以将用户/组链接到活动目录中,您可能会觉得这很有用。当时我使用的 CVS 不可用。现在可能有了,我还没有检查。
在使用 svn 时,可能最大的不同就是您不需要创建标签。相反,您创建看起来像副本的东西,其中项目目录被复制到标签文件夹并被命名。看一下文档,您就会明白我的意思。我知道这看起来很奇怪,但你会习惯的。
这个网站可能会有一些好处(虽然我不能保证):为 php 网站设置模块化 svn 存储库 http://www.howtoforge.com/set-up-a-modular-svn-repository-for-php-websites
答案4
版本控制一切。将 HTML 文件置于版本控制之下,然后由于 CSS 的更改而导致网站完全崩溃,这是没有意义的,因为 CSS 不受控制,因此无法轻易逆转。
陷阱:我个人在有限使用版本控制的过程中还没有遇到过任何问题。
部署:我目前在工作和家中都使用托管在 Windows 机器上的 Subversion。只使用 Windows,因为这是可用的。否则,它很可能是另一个操作系统。对于非技术用户来说,关键是为他们提供一个简单的基于 GUI 的工具来处理导入、导出、提交、差异等。使用什么工具将取决于所使用的操作系统和 VCS 系统。
用途:当我更改代码时,我会经常测试和提交。这样,当我搞砸时,我就可以尽可能地回溯。此外,通过比较各种修订版本并复制部分代码,我不必因为需要恢复到以前的版本来修复代码另一部分中的某些问题而丢失所有更改。
额外的好处:您可以通过 VPN 或安全连接访问源存储库,从而允许用户在家或其他地方工作。例如,我可能会在家里想到一个主意,然后在那儿编辑我的工作代码,直到我失去这个想法为止。