Svn 从subversion推送到web服务器

Svn 从subversion推送到web服务器,svn,version-control,ssh,Svn,Version Control,Ssh,很久以前,我试图在本地、web服务器和subversion之间对我的系统进行分类。我得到了一些很好的解释 不幸的是,我在从SVN到web服务器部件的整个过程中遇到了一个障碍,从此再也没有访问过。我所有的项目都是单独完成的,所以我是唯一开发它们的人,而且通常我是唯一的用户。因此,我大部分时间都可以直接向实时服务器写入数据 2009年,我想改掉这个坏习惯,以正确的方式做事。我可以通过SSH访问我的web服务器(我可以登录和浏览文件),但不知道如何将最新的文件从SVN中获取到服务器中 我已经用谷歌搜索

很久以前,我试图在本地、web服务器和subversion之间对我的系统进行分类。我得到了一些很好的解释

不幸的是,我在从SVN到web服务器部件的整个过程中遇到了一个障碍,从此再也没有访问过。我所有的项目都是单独完成的,所以我是唯一开发它们的人,而且通常我是唯一的用户。因此,我大部分时间都可以直接向实时服务器写入数据

2009年,我想改掉这个坏习惯,以正确的方式做事。我可以通过SSH访问我的web服务器(我可以登录和浏览文件),但不知道如何将最新的文件从SVN中获取到服务器中

我已经用谷歌搜索过了,但我发现的一切都需要一些我还没有掌握的知识

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


谢谢

只需登录到服务器计算机并签出存储库内容即可。这应该只做一次

$ svn checkout [http|svn|whatever_you_got_there]://{your_svn_repo} {checkout_directory}
每次需要使用最新的工作副本更新工作副本时,请执行
update

$ cd {checkout_directory}
$ svn update
发布管理

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

作业可以由svn钩子自动执行

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

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

svn导出[url to repo][web 目录]


导出将意味着您无法获得工作副本附带的.svn行李。

除非您的托管公司允许您访问
cron(1)
或shell,否则这将很困难,因为svn是一家中央VCS,无法将内容推送到工作目录,您应该
svn更新

根据上述可用资源,有几种方法可以实现您的愿望:

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

    不久前我也有过类似的项目,但我没有SSH访问我的服务器,所以我的选择非常有限

    取决于项目的大小,您可能会考虑不进行导出。在我的情况下,这个项目是在一个gig的数据!不实用,因为导出时需要一次又一次地导出所有文件。如果你手头只有一手文件,情况可能会有所不同。此外,在本地计算机上进行导出意味着导出需要先下载文件,然后将其上载到主机,这就像浪费带宽一样

    还要记住,执行SVN导出不会执行任何数据库更新。例如,当你在开发你的网站时,你的数据库可能会改变很多次。仅使用SVN导出,您仍然需要在服务器上手动重新导入数据库

    我建议您编写一个脚本,将其放在服务器上。当然,您可以根据自己的需要对该脚本进行详细说明,但裸骨脚本会对站点的签出版本进行“更新”,在临时文件夹中导出数据库(当然,您的数据库也处于版本控制之下),然后重新导入数据库(或合并数据库,无论需要做什么)。只需一个命令,就可以部署站点。一遍又一遍


    有一些工具可以帮助您实现这种自动化,如和。

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


    你说的是“自动推”。这可以通过post-commit钩子实现。我是一名单人开发人员,为PHP开发人员使用类似的设置:

    副总裁 使用Apache的mod_dav_svn处理svn任务的LAMP堆栈 托管站点的“暂存”版本。该站点的“暂存”版本实际上是一个工作副本,只是在本地签出到Apache可以从中提供服务的目录

    本地VMware计算机 运行NetBeans和LAMP堆栈,安装xdebug用于调试PHP

    我的工作流程如下:

    签出从我的VPS到我的VMware虚拟机的工作副本 通过PhpMyAdmin从VPS获取数据库转储,并导入到虚拟机上的MySQL中 让我滚开,都在本地 最后,导出我的数据库并将其上传到VPS上的MySQL 将我的更改提交到VPS

    关键是提交后钩子——它只是SVN中的一个文本文件,在每个提交事件之后都会被解析。您可以让它调用一个shell脚本,该shell脚本执行一个“svn更新”来更新Apache正在服务的暂存站点的工作副本

    我想您也可以很容易地让shell脚本将SVN导出到staging目录,但这可能需要一段时间才能运行,而对工作副本的更新只会带来更改

    这些便笺都很夸张,但它们是我个人的备忘单,我在设置类似的内容时使用:

    如果您愿意,我还有一个虚拟机的副本,其中配置了所有用于开发的NetBeans,我过去常常将它们分发给初级开发人员。如果你