6

我在一个小型 LAMP 开发工作室工作,我的想法是完成代码并继续执行列表中的下一项。

该团队在 Zend Studio 5.5 中工作,通过 FTP 或 SFTP 连接到 Live 服务器。他们喜欢这一点的是他们部署代码的速度(因为它只是修改实时代码)。

但是,由于许多明显的原因,这当然不好。

我想将它们转移到版本控制系统(CVS、SVN 或任何其他工具),但问题是,我不是他们的资深人士,所以我需要一个胡萝卜让他们开始使用它。

我需要在他们的机器上构建什么样的设置,以便他们可以像往常一样编码?

我要做的是在我的机器上创建这个设置,然后展示它们。

我知道这有点不寻常,但它变成了我的热情,将他们的思维方式从通常的代码黑客行为转变为结构和优雅。谢谢。

更新(对于乔纳森莱弗勒的回答):

  1. 是的
  2. 是的,他们确实如此

还有一个问题,工作室制作了一个托管在数百个站点上的集中式 CMS 系统,他们需要修改各个站点,这些站点应该在主合成器中还是在他们自己的合成器中?

4

8 回答 8

7

问题:

  1. 您(他们)是否从未遇到过灾难,您(他们)需要恢复到网站的先前版本,但因为他们破坏了它而无法恢复?

  2. 他们是否使用登台 Web 服务器来测试更改?

  3. 如果没有在某处进行一些测试,他们肯定不会修改生产服务器中的代码吗?

我怀疑第一个的答案是“是的(他们经历过灾难)”,第二个的答案是“否”,我犹豫着猜测第三个的答案(但是,从它的声音来看,答案可能是“是的,他们真的这样做了”)。如果那是正确的,我钦佩他们的虚张声势,并对他们从不犯错感到惊讶。我绝不会冒险直接在实时网站上进行更改。

我建议您自己使用版本控制系统或 VCS(任何 VCS)。解决您所关心的代码的问题,并开发出能够轻松(可能仍在使用 SFTP)将 VCS 代码分发到网站的流畅分发。但也表明保留以前的版本有其优点——因为你可以恢复谁在什么时候做了什么。首先,您可能会发现您需要下载您需要处理的任何页面(文件)的当前版本,并将最新版本放入 VCS,然后再开始修改页面,因为其他人可能已经修改了它上次在您的主存储库中更新。您可能还想每天对文件进行“刮擦”以获取当前版本 - 并跟踪更改。你不会有“谁”,也没有“何时”


在回答问题中的评论时,Ólafur Waage 澄清说,由于缺乏 VCS,他们遇到了灾难。

这通常会使生活更轻松。他们搞砸了;他们无法解决这个问题——他们可能惹恼了客户,他们应该对自己感到非常恼火。VCS 可以更容易地从此类错误中恢复。显然,对于任何给定的自定义站点,您都需要 VCS 中可用的该站点的“正确”或“官方”版本的(中央)备份。我可能会为所有客户选择一个单一的存储库,使用对分支和合并有良好支持的 VCS。起初这可能更难处理(当人们习惯使用 VCS 时),但从长远来看可能会带来更好的结果。我会认真考虑使用现代分布式 VCS(例如git),

于 2008-12-28T23:23:45.987 回答
2

您可以使用 tortoise svn 客户端在本地计算机上的其他文件路径上创建和使用存储库,然后您的工作路径是....

也许尝试为自己设置和使用它,并在一段时间后向他们展示它可以为你做什么。另一个很酷的事情可能是在您的服务器上安装 trac ( http://trac.edgewall.org/ ),如果您有访问权限和权限,或者可能在您自己的开发机器上的某个虚拟机中安装。您可以将 trac 映射到您的 svn 并在 Web 界面中获取 svn 更改,您可以将其显示给项目经理。也许他会因为他能够通过 Web 界面轻松查看代码更改而爱上它。当然,您可以仅使用 apache + svn 模块来做到这一点,但这更好,因为它提供了票务和路线图的路径(里程碑和经理可能挖掘的东西:o))..

无论如何祝你好运:)。至少,将它用于您在本地计算机上的工作,因为这样做只会让您受益。

于 2008-12-28T23:33:10.603 回答
2

您可以在本地系统上安装 SVN 以进行演示。有一些工具可以将 Zend 和 Eclipse 集成到 SVN。我认为除了做一个 SVN 的演示之外,您可能应该向他们介绍它会带来的一些好处(可能在演示期间)。

转到此链接以获取一些想法:我真的需要版本控制吗?

于 2008-12-28T23:37:17.647 回答
2

这是每个人都会喜欢的一个技巧:

我在我的大多数生产站点中都包含了这个“插件”:当然,您需要首先为此创建一个有限权限的机器人 svn 帐户,并且必须在服务器上安装 svn。

    echo(' updating from svn<br>' );
    $username = Settings::Load()->Get('svn','username');
    $password = Settings::Load()->Get('svn','password');
    echo(" <pre>" );
    $repos = Settings::Load()->Get('svn' , 'repository');
    echo system ("svn export --username={$username} --password {$password} {$repos}includes/ ".dirname(__FILE__)."/../includes --force");
    echo system("svn export --username={$username} --password {$password} {$repos}plugins/ ".dirname(__FILE__)."/../plugins --force");

    die();

当然,请确保将其放在 .htpasswded 站点后面,并确保不要从 SVN 更新“生产设置”。等等,你用一个 HTTP 查询更新你的完整代码库到你的站点 :) SVN 自动覆盖文件,没有隐藏文件或文件夹留下,它很容易适应更新或恢复到特定版本。现在您的团队需要做的就是提交到他们的 SVN 存储库,在测试环境中运行这段代码,确保一切正常,然后在生产环境中运行它 :)

于 2008-12-29T13:01:30.860 回答
1

Ólafur,您提到“工作室制作了一个托管在数百个站点上的 CMS 系统”。这本身可能就是你需要的胡萝卜。如果团队经常为这数百个站点部署更新,那么在版本控制系统中使用分支可能会使这个过程对每个人来说都更容易。这可能会节省大量时间,从而激励人们学习版本控制系统。

听起来这些网站都是相关的——同一个 CMS 的定制版本。在这种情况下,除了未定制的 CMS 产品之外,您应该将所有站点放在同一个存储库中。然后,您可以将它们全部配置为同一中心产品的分支。如果您使用单独的存储库,则没有简单的方法来创建分支以将定制与主产品相关联。(我认为你可以用 Subversion 来做这件事,很可能还有其他人,但如果所有开发人员都为同一个组织工作,那就很复杂而且没有必要。)

于 2008-12-28T23:43:43.717 回答
0

VisualSVNServer 和 TurtoiseSVN 是我使用的两个程序,它们都有很好的文档记录,并且与 Windows Explorer 和 Visual Studio 集成得非常好。

于 2008-12-28T23:46:01.730 回答
0

使部署成为自动化“构建”过程的一部分,因此开发人员不必担心它。使用“流”将工作保持在开发区域、质量保证区域和发布区域,然后拥有部署最新开发、质量保证和发布环境的自动化流程。

于 2008-12-29T05:15:27.057 回答
0

只需将 ie SVN 放在中间即可。

开发团队将新内容放入 subversion,然后您有一个脚本可以从 svn 导出内容并将其发送到网络服务器。

这与他们今天的工作方式非常接近,但每一个微小的变化都已记录在颠覆中,因此如果雷击,可以非常快速地及时恢复所有内容。

/约翰

于 2009-01-04T20:30:18.787 回答