从subversion推送到Web服务器

时间:2009-01-13 08:43:43

标签: svn version-control ssh

很久以前我试图在本地,Web服务器和颠覆之间整理我的系统。我对this question得到了一些很好的解释。

不幸的是,我从SVN到网络服务器部分的整个过程中遇到了障碍,从未重新访问过。我的所有项目都是独立的,所以我是唯一一个开发它们的人,而且我经常是唯一的用户。所以我已经能够在大多数时间直接写入直播服务器。

对于2009年,我想打破这种坏习惯,并以正确的方式做事。我有SSH访问我的Web服务器(我可以登录和浏览文件),但不知道该怎么做才能从SVN中获取最新的文件到服务器。

我用手指搜索了骨头,但我发现的一切都需要一些我还没有的知识。

我真的非常感谢如何自动将最新版本的代码从SVN repo推送到实时Web服务器的一步一步指导。仅供参考我目前正在使用Beanstalk进行Subversion托管,但如果有人有更好的建议,我完全愿意改变它。

由于

7 个答案:

答案 0 :(得分:29)

如果您有SSH访问权限,则可以执行以下操作:

  

svn export [url to repo] [web   目录]

出口意味着您没有获得工作副本附带的.svn行李。

答案 1 :(得分:3)

简单地 - 登录到您的服务器计算机并检出存储库内容。这应该只进行一次。

$ svn checkout [http|svn|whatever_you_got_there]://{your_svn_repo} {checkout_directory}

每当您需要使用最新版本更新工作副本时,请执行update

$ cd {checkout_directory}
$ svn update

答案 2 :(得分:1)

发布管理

您可以创建一个将svn导出到本地文件夹的作业/批处理。 导出后,您可以使用rsync上传它。

作业可以通过svn钩子自动执行。

您也可以使用mtod方式但请记住: 如果有人可以访问.svn文件夹,则在服务器上使用结帐存在安全风险! 他们可以访问php代码并查看密码或错误。

答案 3 :(得分:0)

除非您的托管公司授予您访问cron(1)或shell的权限,否则很难因为集中式VCS的svn无法将内容推送到工作目录,您应该svn update

根据上述可用资源,有几种方法可以做你想做的事情:

  1. 定义执行crontab(5)
  2. cd $WEBSITE && svn update条目
  3. 使用ssh连接到您的网站并执行相同的命令。 ssh可以通过您crontab条目实现自动化。
  4. 在您的网站上有一个特殊的cgi,希望受密码保护,可以定期运行(从你身边的cron执行相同的命令。
  5. 对我来说,最好的方法仍然是转向分散的VCS(如Mercurial或git),但这是一个更大的项目。

答案 4 :(得分:0)

前段时间我有点类似question,但我没有SSH访问我的服务器所以我的选择非常有限。

根据项目的大小,您可能会考虑不进行导出。就我而言,该项目超过了数据!不实用,因为导出时需要反复导出所有文件。如果你手上只有一个文件,它可能会有所不同。此外,在本地计算机上执行导出意味着导出需要先下载文件,然后将其上传到您的托管,这就像浪费带宽一样。

另请注意,执行SVN导出不会执行任何数据库更新。例如,在您开发站点时,您的数据库可能会更改。只需要SVN导出,您仍然需要在服务器上手动重新导入数据库。

我建议您编写一个放在服务器上的脚本。您可以根据需要精心制作此脚本,但裸骨脚本会对您网站的签出版本进行“更新”,将数据库导出到临时文件夹中(您的数据库当然也会被放置)在版本控制下)并重新导入数据库(或合并它,无论它需要做什么)。只需一个命令,您就可以部署您的站点。一遍又一遍。

有些工具可以帮助您实现此类自动化,例如CruiseControlCapistrano

答案 5 :(得分:0)

您是否尝试在Beanstalk上使用我们的FTP部署?我们还提供了Web挂钩,这意味着您可以在每次提交时ping一个URL来编写自己的内容。

http://help.beanstalkapp.com/articles/17-deployment-and-releases

答案 6 :(得分:0)

你说'自动推'。这可以通过post-commit钩子完成。我一直是一个单独的开发人员,并为PHP开发人员使用这样的设置:

VPS   LAMP堆栈与Apache的mod_dav_svn处理SVN职责   托管网站的“暂存”版本。该网站的“暂存”版本实际上是一个工作副本,只是在本地检出,到Apache可以提供的目录

本地VMware机器   运行NetBeans和LAMP堆栈,安装xdebug以调试PHP

我的工作流程是这样的:

查看从我的VPS到我的VMware虚拟机的工作副本 从VPS通过PhpMyAdmin获取数据库转储,并在虚拟机上导入MySQL 在我当地解雇我的屁股 在结束或日期,导出我的数据库并将其上传到VPS上的MySQL 将我的更改提交给VPS

关键是post post hook - 它只是SVN中的一个文本文件,在每次提交事件之后进行解析。你让它调用一个shell脚本,并且该shell脚本执行'svn update'来更新作为Apache正在服务的暂存站点的工作副本。

我想你可以很容易地让shell脚本对你的临时目录进行SVN导出,但这可能需要一段时间才能运行,而对工作副本的更新只会进行更改。

这些笔记非常强大,但它们是我在设置此类内容时使用的个人备忘单:

http://random.siliconrockstar.com/dev_ShellScriptingAndNixAdmin/SVN.txt

如果你愿意,我也有一份配置了我用于开发的NetBeans虚拟机的副本,我曾经把它们交给初级开发人员。如果你想要一份副本就是PM me。