在生产服务器上使用subversion使文件有效的最佳方式是什么


What is the best way to make files live using subversion on a production server?

目前我已经设置了subversion,这样当我在Eclipse PDT中进行更改时,我可以提交更改,这些更改将保存在/home/administrator/项目文件中。该文件具有subversion推荐的/branchs/tags和/trunk目录。我将文件正确上传到存储库没有问题,但我是否必须将Linux中的文件"mv"到/var/www才能使它们在服务器上运行?有没有一个我缺少的自动流程来完成这项工作?我假设我们不想让/var/www目录(它在机器上)成为存储库,但我不知道。

您可以在www目录中执行svn export。这将为您提供一个"干净"的repo版本,不包含.svn目录。

cd /var/www
svn export /home/administrator/MyProject/trunk MyProject

编辑:在评论中添加一些好的想法。。。

当你想更新你的导出副本时的一些选项:

  • 运行svn export --force /home/...../ MyProject,这将阻止它抱怨覆盖现有文件。这种方法意味着,如果您从存储库中删除一个文件,它仍将保留在您的www文件夹中
  • 更改SVN命令以每次导出到新目录中:
    svn export /home/..../ MyProject_20081105
    然后创建一个指向该文件夹的符号链接:
    ln -s MyProject_20081105 MyProject
    每次"释放"时,只需删除并重新创建符号链接即可。在这种情况下,导出目录根本不需要在www文件夹中

您只需在/var/www文件夹中签出存储库的副本,然后在需要时对其运行svn-update(或将其切换到新的分支/标记等)。因此,您在进行更改和更新的本地机器上签出了一份repository副本,在您的Web服务器上又签出了另一份副本。

使用SVN存储库还可以恢复到早期版本。

您还可以制作一个提交后挂钩,将提交后更改的所有文件移动到/var/www目录。

下面是一个用python编写的示例,它通过ftp:将更改后的文件上传到远程主机

http://svn.haxx.se/dev/archive-2007-08/0287.shtml

您可能需要记住在任何给定时间生产中有哪些文件,因此请保留"release"标记(例如在/project/tags/release中)。当你想发布时,把你的行李箱复制到那里。然后svn导出发布标签。

或者什么的。

我在这里和其他论坛上看到很多人谈论使用Capistrano进行部署,但我没有任何个人经验。