我们是一个相当小的公司(3-4名程序员和3-4名网站devise师),开发了一个单一目的的PHPnetworking应用程序,为约100多个网站提供function。 我们在一个单独的开发和生产环境中运行了几年,运行得相当好。 总是有足够多的独立特性被开发出来,程序员们从来没有真正的冲突过,没有源代码控制的情况下工作起来更方便。 即使它有数据丢失的风险,而且我们已经有一小部分文件在不经意的情况下丢失了。
另一个考虑是我们的devise师不是技术精通(我介绍他们到HTML标记,而不是使用所见即所得)。 这是犹豫转向版本控制的原因之一。
然而,现在我们已经达到了100多个网站,而且开发团队也在不断增长,我正在努力使我们的程序标准化,对于程序员来说,源代码控制似乎是一个合理的步骤。 我希望这也会加快我们的补丁部署。
不幸的是,我设置源代码控制系统的经验非常有限。 我很好奇从具有相似设置的人,或经验转换的人那里听到:
1)你是否一切版本(网站,CSS,HTML模板和应用程序代码),从而迫使devise师学习版本? 还是只是开发人员在应用程序代码上工作?
2)初始设置源代码控制时需要注意哪些问题?
3)部署dev =>源代码pipe理的生产提示。
感谢所有的洞察力。
编辑1:当。 到目前为止,每个人都在推荐控制一切。 那会让我早早失去理发。 这可能会在不久的将来引发一个新的问题。 感谢您的build议,保持它的到来!
编辑2:很多好的答案,我们将研究各种版本控制系统。 感谢大家的回复!
即使对于devise人员来说,所有的版本都是有帮助的。 而且,如果通过良好的培训得到很好的实施,我认为他们会觉得比累人更有帮助。
如果你刚刚开始,我强烈build议使用分布式版本控制系统,如git或mercurial 。 这是世界的大势所趋,有很多优点。 在断开连接的模式下工作很简单,没有networking依赖性,能够在版本控制下进行私人的,未完成的工作,在准备就绪时集中检查所有事情。
而且,不要诉诸权威或任何东西,但看看Joel Spolsky 在这个话题上要说些什么。 (select引用:“Subversion = Leeches,Mercurial and Git = Antibiotics。”)除此之外,他提出了一个有趣的观点,即这些新系统使用了一种新的心智模式,与传统的版本控制不同 – 这就是为什么进入这种从一开始就是一个胜利。
我会说把一切都在版本控制之下。 一旦全部工作,就可以将其复制到一个标签,对于大多数SCM系统来说,服务器上不需要大量的磁盘空间。
至于最初的陷阱,你应该不必担心太多; 把所有东西都提交给服务器,如果不正确,你可以随便洗个澡,稍后删除额外的东西。 我不会提交的唯一东西是从源码构build的工件,也就是说,Java代码文件属于版本控制,但不包含编译类或“源自源码”二进制文件的整个ISO / DVD。
开发生产很容易,在每个主要的里程碑创build一个分支。 版本控制系统中的目录布局通常如下所示:
/ trunk / project / branches / project / version1 / branches / project / version2 / branches / project / version3
假设您在产品的第2版中发现了一个错误,您可以导航到该分支,修复它并发布版本2.1。 所有这些工作都是在新版本4的/ trunk / project文件夹中完成的,而且这取决于哪些function是向前和向后合并的。
不要让供应商帮助你的供应商欺骗你,在那里stream行的版本控制系统,即Subversion和Git之间几乎没有什么function差异。 对于您的团队来说最重要的事情就是将这些服务器与现有工具集成在一起。 我不喜欢所见即所得,但它确实很高兴有eclipse-php或其他与服务器兼容的IDE。
我是一名开发人员,之前曾经从事ITpipe理工作。
回答你的具体问题:
1)是的,版本的一切。
2)build议你build立一个虚拟版本控制库和虚拟项目供人们学习。
3)标记投入生产的版本。 即使是审判。 然后,您可以随时查看某个人正在运行的特定版本。
我看到你已经标记了CVS的问题。
我的build议是认真对待颠覆,而不是TortoiseSVN,这使得它非常容易使用。 还有一个TortoiseCVS。
我build议你运行一个关于版本控制的内部教程。 如果您的开发人员/devise师之前没有遇到过这个问题,我会感到惊讶 乌龟只是使用户非常友好。
将其中一个web界面安装到cvs或subversion也是有好处的。
我build议颠覆CVS的原因是虽然CVS非常好,但是它有一些严重的devise和实现问题。 对我来说biggies是:1)你不能版本目录2)二进制文件处理不太好,因为很多东西默认为文本。 3)没有primefaces提交。 4)我记得它经常搞砸,并留下locking文件,我不得不手动从代码存储区中删除。 自从您的锁文件以来,这样做有腐败的空间。 5)SSL支持和pipe理用户/密码
Subversion基本上解决了所有这些问题可能是其他许多问题。 它也有很多先进的function,如外部(我实际上使用)。 并且可能将用户/组链接到您可能会觉得有用的活动目录。 当时我使用的CVS是不可用的。 现在可能是,我没有检查。
在使用svn的时候,最大的区别就是你不需要创build标签。 相反,您可以创build显示为项目目录复制到“标签”文件夹并给定名称的副本。 看看文档,你会明白我的意思。 我知道这看起来很奇怪,但你已经习惯了。
这个网站可能有一些好处(虽然我不能担保):build立一个PHP网站的模块化svn仓库http://www.howtoforge.com/set-up-a-modular-svn-repository-for -php-网站
非常尊重上面提到的大部分智慧 – 明智的做法 – 版本控制的推出就像监控系统的推出一样。 我的客户说“我该监视什么”,显而易见的答案是“监视所有事情”。 但是这不是一个好消息:他们有350个系统,每个系统都有20-30个系统variables加上一堆特定用途的variables,并且都可以被有效地监控。 但是我只有一个人,他们希望在两周内看到一些结果。
所以尽pipe我同意最好的做法是版本控制所有的东西,但如果这一切都不可行的话,首先要控制那些缺乏控制力的东西,这是迄今为止最大的问题 。
如果大多数中断是由应用程序代码引起的,则从控制开始; 如果大多数是由非计划的CSS补丁,控制; 等等。
这不仅可以为您带来最佳的投资回报,而且反过来也是您今后继续使用版本控制的充分理由:“由于我们为应用程序代码添加了版本控制,超过30分钟的计划外停机从一个月的11个下降到了2个。这两个是由静态的HTML变化引起的,所以我们打算对下一个版本进行版本控制。“
一个gradle的展示也给你在组织内的熟练的用户。 是的,你必须教所有六个应用程序开发人员如何使用这个系统,但是他们学到了,而且他们也没有问题。 现在是把系统推广到CSS团队的时候了,你还有六个内部专家,比三个月前还多。 这个时候你甚至可能已经悔改了。 一个有能力迅速退出破坏性变化的开发人员可能会成为CSS团队的最佳传道人。
编辑1:如果你决定走这条路线,那么一个便宜的芯片支架就是在上面加上绊网线 ,至less在生产线上是这样。 那样的话,如果发生事件,但是VCS说它现在没有任何责任,那么你可以快速地识别出什么改变了,哪一个都能加速修复,并build议你的下一个版本控制候选者。
版本控制一切。 在版本控制下没有任何意义的HTML文件,然后由于没有被控制的CSS改变而导致网站被彻底搞砸,因此不容易被颠倒过来。
陷阱:我个人还没有遇到任何在我公认的相当有限的版本控制使用。
部署:我目前在工作和家中使用托pipe在Windows上的subversion。 Windows只是因为这是可用的。 否则,它可能很容易被另一个操作系统。 非技术用户的关键是我给他们一个简单的基于GUI的工具来处理import,出口,提交,差异等等。使用什么工具将取决于使用的操作系统和VCS系统。
使用:当我改变代码时,我经常testing和提交。 当我搞砸的时候,这可以让我尽可能地回去。 另外,通过比较代码的各种修订和复制部分,我不必因为需要恢复到以前的版本来修复代码的另一部分中的某些东西而丢失所有更改。
增加的好处:您可以通过VPN或安全连接访问源存储库,允许用户在家中或其他地方工作。 例如,我可能会在家里得到一个想法,并在那里编辑我的工作代码,然后在我失去想法之前。
版本一切。
部署取决于你需要为每个站点“自定义”多less。 如果除了configuration文件或两个configuration文件以外,它们是相同的,那么您可以将代码的副本签出给它们,并稍作更改。 根据需要,为每个客户端运行版本控制的更新命令。
如果您将“直接结帐到客户的网站”分发模式,您将需要确保您的服务器不允许访问版本控制目录,以便人们无法浏览到http://example.com/。 git /并窥视你的内部。 此外,我肯定会有一个testing和生产虚拟主机为每个客户端,以确保网站更新不会失控。 特别是如果您要对个人客户的文件进行自定义更改,则需要在更改生效之前处理冲突。 在这种情况下,您需要签出/更新testing虚拟主机,当一切正常时,您需要将testing虚拟主机复制到生产虚拟主机。
所有人都在说什么版本是好的。
如果你决定去颠覆,我可以推荐尝试Bitnami Trac堆栈; http://bitnami.org/stack/trac
它简化了为你设置颠覆,带有一个票务系统(你可以select在这个阶段select使用),以跟踪变化和错误,以及一个wiki,你可以用它来logging你的开发人员如何使用系统。
给你所有的Windows开发者TortoiseSVN。 教大家几个svn命令行的基础知识。
在这一天结束的时候,这个工具并不像您需要在开发人员中灌输的心态那么重要。 希望他们能很快看到版本控制是一件好事,因为它阻止了他们失去工作,并允许他们从死亡的angular度回归到无处可回的状态。 好处大于(轻微)的开销。