20

很久以前,我试图在本地、Web 服务器和颠覆之间整理我的系统。我对这个问题有一些很好的解释。

不幸的是,我在从 SVN 到 Web 服务器部分的整个推动过程中遇到了障碍,并且从未重新访问过。我所有的项目都是单独的,所以我是唯一一个开发它们的人,而且通常我是唯一的用户。所以我大部分时间都可以直接写到实时服务器上。

在 2009 年,我想改掉这个坏习惯,真正以正确的方式做事。我可以通过 SSH 访问我的 Web 服务器(我可以登录并浏览文件),但我真的不知道该怎么做才能将最新的文件从 SVN 中获取到服务器中。

我已经用谷歌搜索了我的手指,但我发现的所有东西都需要一些我还没有的知识。

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

谢谢

4

7 回答 7

29

如果你有 SSH 访问权限,你可以这样做:

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

导出意味着您不会得到工作副本附带的 .svn 包袱。

于 2009-01-13T09:00:32.367 回答
3

简单 - 登录到您的服务器机器并签出存储库内容。这应该只做一次。

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

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

$ cd {checkout_directory}
$ svn update
于 2009-01-13T08:49:25.400 回答
1

发布管理

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

该作业可以由 svn 挂钩自动执行。

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

于 2009-01-13T08:58:32.150 回答
0

除非您的托管公司允许您访问其中一个cron(1)或一个 shell,否则这将是困难的,因为 svn 是一个集中式 VCS,没有办法将内容推送到工作目录,您应该这样做svn update

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

  1. 定义一个crontab(5)条目cd $WEBSITE && svn update
  2. 使用 ssh 连接到您的网站并执行相同的命令。ssh可以通过crontab您身边的条目自动执行。
  3. 在您的网站上有一个特殊的 cgi,希望受密码保护,可以定期运行(从cron您这边)执行相同的命令。

对我来说最好的方法仍然是转向去中心化的 VCS(如 Mercurial 或 git),但这是一个更大的项目。

于 2009-01-13T09:03:46.323 回答
0

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

根据项目的大小,您可能会考虑不进行导出。在我的情况下,该项目是在一个数据的演出!不切实际,因为通过导出,您需要一遍又一遍地导出所有文件。如果您只有一手文件,那可能会有所不同。此外,在您的本地机器上进行导出意味着导出需要先下载文件,然后将其上传到您的主机,这就像浪费带宽一样。

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

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

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

于 2009-01-13T22:09:43.507 回答
0

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

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

于 2009-03-22T21:38:24.537 回答
0

你说'自动推送'。这可以通过提交后挂钩来完成。我一直是一名单人开发团队,并为 PHP 开发人员使用了这样的设置:

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

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

我的工作流程是这样的:

检查从我的 VPS 到我的 VMware 虚拟机的工作副本通过 PhpMyAdmin 从 VPS 获取数据库转储并导入到虚拟机上的 MySQL 开发我的屁股关闭,所有在本地结束或一天,导出我的数据库并将其上传到 MySQL VPS 将我的更改提交到 VPS

症结是提交后的钩子——它只是一个 SVN 中的文本文件,在每次提交事件之后都会被解析。您让它调用一个 shell 脚本,并且该 shell 脚本执行“svn update”来更新工作副本,该工作副本是 Apache 正在服务的登台站点。

我想您可以轻松地让 shell 脚本将 SVN 导出到您的暂存目录,但这可能需要一段时间才能运行,而对工作副本的更新只会进行更改。

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

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

如果您愿意,我还有一份配置了 NetBeans 的 VM 副本,用于开发,我曾经将它们分发给初级开发人员。如果你想要一份副本,只需 PM 我。

于 2013-07-11T21:28:44.147 回答