使用svn进行Web开发的最佳方法

时间:2008-12-27 04:26:46

标签: svn

我在服务器上安装了svn,我想知道最好的方法是使用它。例如,我有htdocs和cgi-bin的apache文件夹。我应该把这两个文件夹放在svn中吗?当我在一个项目上工作时,我通常将project_name作为每个文件夹中的文件夹 - htdocs / projname和cgi-bin / projname?我应该两个吗?从htdocs中获取我的图像和其他东西是不是一个好主意,或者我应该只使用我的代码?

此外,是否值得svning word文档,psd文件(通常大约100mb左右)?或者我应该避免它们?

我已经在对所有数据进行每日增量备份。

您认为小型网络开发公司应采用的最佳策略是什么?

非常感谢你的时间。

8 个答案:

答案 0 :(得分:9)

  • 请记住,Subversion不仅用于备份文件,还用于在不同时间点记录环境快照,因此您可以根据需要恢复到以前的状态。因此,如果你需要它,它会发生变化,那么它应该在Subversion中(除非它是从Subversion中的其他文件生成的文件)。

  • 对于正常的软件项目,通常有/ trunk /和/ releases /目录。对于Web项目,我喜欢/ devel /和/ live /目录,每个目录下都有/ docroot /目录,其中包含Web服务器的DocumentRoot的内容。所有不用于发布的文件(工作文件,源代码,程序等)都在/ docroot /之外。

  • 要将工作从Subversion发布到Web服务器,请使用“svn export http://url/live/docroot / path / to / web / docroot”,这将转储所有文件(不包含.svn目录)。< / p>

  • 所有工作都在/ devel /目录下完成。如果您对更改感到满意(希望您有机会在内部发布devel网站进行测试),请使用“svn merge”将更改从devel存储库复制到实时存储库。

答案 1 :(得分:4)

如果您要从服务器上的Subversion检出项目以进行部署,那么您可能希望将它们放在同一个伞形项目中。

您应该考虑使用部署脚本(Ant,Rake,Perl)从开发计算机自动发送/更改您的更改,而不是从服务器上的Subversion中检出。

您应该为重新创建网站所需的任何内容以及对网站重要的任何内容进行版本化 - 包括网站图片,CSS,JavaScript

如果你看到有很多大型二进制文档,并且不希望它们填满你的存储库,你可以考虑将它们放在一个单独的文件夹中,并设置Subversion忽略该文件夹。

答案 2 :(得分:2)

SVN是一个版本控制系统。这可能听起来很傻,但你应该将它用于任何你想要版本化的东西。通常的做法是拥有您在SVN存储库中主动处理的所有代码库。

但这并不是一成不变的 - 你可以在那里放任何你想要的东西。它只是用于存储代码版本,如果您想要返回并恢复文件的早期副本(任何类型),您可以。

希望能给你一个大致的想法,

答案 3 :(得分:2)

首先,尝试理解版本控制系统背后的概念以及附加到它的工作流程(导入,检出,提交,更新)。特别是如何将它们集成到您的开发和部署过程中。这是一个非常简单的示例工作流程(为简单起见,非自动部署过程):

  1. 将项目文件导入subversion存储库
  2. 在开发计算机上签出工作副本
  3. 进行更改并提交
  4. 在您的服务器上有一个工作副本(svn checkout)。理想情况下,您具有对服务器的ssh访问权限,因此您可以在服务器上发出此命令。为了实现这一点,您的svn存储库必须可以从您的服务器访问(例如,通过http或svn协议设置svn服务器)。如果您没有ssh访问权限,只需通过ftp上传svn导出。
  5. 更新服务器上的文件(svn update或ftp upload)
  6. 至于主干,分支和标签:如果您想遵循惯例,这些只是您必须创建的svn存储库中的文件夹:

    • trunk:开发版
    • branches:释放例如STABLE-1.0。您的生产服务器通常在发布分支的工作副本上运行
    • 标签:中的某些里程碑 发展历史

    例如,您可以通过在分支内创建文件夹STABLE-1.0并将文件复制到其中来创建版本1版本稳定版本。

    一旦建立了开发过程,就可以使用适合您的任何工具(如shellscripts,ant,capistrano等)自动化它,因为手动部署过程容易出错。

    有一本非常好的关于颠覆的书以及实用程序员称之为“使用Subversion的语用版本控制”(http://www.pragprog.com/titles/svn/pragmatic-version-control-using-subversion)背后的概念。

答案 4 :(得分:1)

我想说在大多数情况下,你想要SVN使你的项目在给定版本中的一切。始终包含所有内容的来源,以便能够完全按原样重新生成项目。您可能不会想要应用程序的编译版本,因为您可以轻松地从源代码中取回它们。

还包括依赖项的二进制文件(例如图像),并且您不希望或不能轻易地从手中重新生成。例如,不要放置一百个PSD,因为从它们中重新生成精确的索引GIF可能需要很长时间。但除了GIF之外,你可能还想要包含你的PSD。包括已购买的专有库的DLL等等......最后,我要说的是还要输入使应用程序按原样运行的任何配置文件:Apache vhost,.htaccess,php.ini等。

我认为真正的秘密是尽可能地接近测试先前版本的一两次点击。其他备份很棒(您还应该备份SVN存储库),但是您不希望从内存中重新创建从备份文件夹中文件的修改日期开始的版本6。

答案 5 :(得分:1)

我将所有内容都放到程序员需要的版本控制中。现在您的情况可能需要单词docs和psd文件。根据我的经验,文档通常由项目管理(以及项目管理)创建,实际上我最终为此设置了文档存储库(我们使用Knowledge Tree)。对于图形源文件,我建议使用单独的存储库或至少一个不同的项目,这样您就不需要包含对应用程序的开发/部署不必要的动画。

我经常看到忽略的一件事是配置脚本。显然,您需要小心保持生产密码,但您需要示例和纯文本说明,以便任何IT技术人员都能够弄清楚如何设置。但请确保您的应用程序,apache,数据库的配置文件 - 所有部分。

我们部署的最大帮助是采用全自动系统来部署我们的服务器。对于rails,我们使用了奇妙的Capistrano,对于windows,我们使用svn和python自行编辑。我真的不推荐自己动手,需要很多时间和精力。然而,它最终为我们节省了很多。

即使您不使用Rails,我建议您对how Capistrano works进行一些研究,它运作良好,并解决了我们正在处理的很多问题。

答案 6 :(得分:1)

有几个Web开发问题,svn是一个很好的一站式解决方案:

1:版本控制:svn将过去的版本维护为存储集,即每个提交都有自己的引用ID,其中包含该提交中更新的所有文件。仔细使用,这可以让您监控错误修复所触及的所有文件,例如,丢失的内容。

2:轻松分支:这使您可以在不破坏运输系统的情况下,在正在进行的维护工作的同时处理新功能,然后在完全测试后将新东西合并回主干。即使对于一个程序员商店来说,这也值得投资让svn启动并运行。首先,你不要失去以前工作的系统,第二个在它之间移动和新的开发几乎简单易于存档完整的产品树,第三,你的客户体验不会被开发迭代破坏,第四,这可以用于沙盒并发多个程序员的工作。

3:不要将svn版本与归档混淆。它们是非常不同的东西。在您的标准存档/备份方案中包含您的svn存储库。

4:svn知道如何保留二进制文件的增量,不像cvs这样的旧系统,所以在svn下保留项目中的所有内容都值得做。保持svn树与产品交付相同,然后部署只是ssh到您的站点服务器并在html和cgi-bin文件夹中运行svn update(确保Apache配置为拒绝所有.svn管理文件夹)。

5:数据库集成度稍低,但保留了数据库导出存档的一部分。

6:现在当您需要重新创建过去状态时,无论出于何种原因,所有需要的工具和其他文件都应该有助于实现此目的。请注意,svn本身并不完全解决碎片存储库问题:html /,cgi-bin- /和db状态是不相交的,需要手动关联,除非你将它们放在一个伞形文件夹下。

7:你需要apache2和openSSL以及一个有效的证书才能在你的svn服务器上使用svn。您可能已经安装了sionce。

如果你的工作进展文件中有一个糟糕的客户体验逃到现场,那么一个好的svn方案本身就可以防止这种情况发生。大多数IDE和编辑器还包括svn管理工具,因此您不必退出命令行。还有来自http://www.tigris.org/的OS X Finder和Windows资源管理器插件(以及许多其他优秀工具)。

答案 7 :(得分:0)

我版本控制可能发生变化的一切。 对我而言,这包括:

  • 网页内容(html和图片)
  • 第三方库(导入.jar文件)
  • 文档
  • 服务器配置文件
  • 甚至部署脚本本身(ANT和.bat)

我更喜欢“项目”的文件夹,其中包含每种类型内容的子文件夹。 这样,如果我只编辑代码,我就不必查看大文档文件夹。

使用适合您的任何结构,但不要丢失您的更改记录,因为它可以保存您的@ $$以便能够撤消更改或恢复您认为不再使用的文档。