很久以前我试图在本地,Web服务器和颠覆之间整理我的系统。我对this question得到了一些很好的解释。
不幸的是,我从SVN到网络服务器部分的整个过程中遇到了障碍,从未重新访问过。我的所有项目都是独立的,所以我是唯一一个开发它们的人,而且我经常是唯一的用户。所以我已经能够在大多数时间直接写入直播服务器。
对于2009年,我想打破这种坏习惯,并以正确的方式做事。我有SSH访问我的Web服务器(我可以登录和浏览文件),但不知道该怎么做才能从SVN中获取最新的文件到服务器。
我用手指搜索了骨头,但我发现的一切都需要一些我还没有的知识。
我真的非常感谢如何自动将最新版本的代码从SVN repo推送到实时Web服务器的一步一步指导。仅供参考我目前正在使用Beanstalk进行Subversion托管,但如果有人有更好的建议,我完全愿意改变它。
由于
答案 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
。
根据上述可用资源,有几种方法可以做你想做的事情:
crontab(5)
cd $WEBSITE && svn update
条目
ssh
可以通过您crontab
条目实现自动化。cron
执行相同的命令。对我来说,最好的方法仍然是转向分散的VCS(如Mercurial或git),但这是一个更大的项目。
答案 4 :(得分:0)
前段时间我有点类似question,但我没有SSH访问我的服务器所以我的选择非常有限。
根据项目的大小,您可能会考虑不进行导出。就我而言,该项目超过了数据!不实用,因为导出时需要反复导出所有文件。如果你手上只有一个文件,它可能会有所不同。此外,在本地计算机上执行导出意味着导出需要先下载文件,然后将其上传到您的托管,这就像浪费带宽一样。
另请注意,执行SVN导出不会执行任何数据库更新。例如,在您开发站点时,您的数据库可能会更改。只需要SVN导出,您仍然需要在服务器上手动重新导入数据库。
我建议您编写一个放在服务器上的脚本。您可以根据需要精心制作此脚本,但裸骨脚本会对您网站的签出版本进行“更新”,将数据库导出到临时文件夹中(您的数据库当然也会被放置)在版本控制下)并重新导入数据库(或合并它,无论它需要做什么)。只需一个命令,您就可以部署您的站点。一遍又一遍。
有些工具可以帮助您实现此类自动化,例如CruiseControl和Capistrano。
答案 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。