2

我正在尝试设置特定的工作流程,但无法弄清楚 rsync 如何(或是否)为此工作。

我的设置是在 Mac OS X 上。

我有我的 SVN 目录。当我运行我的部署脚本时,这些文件被移动到我的集成 Apache 服务器上。我对文件进行了修改,然后手动将它们复制回 SVN。

我这样做的原因是我需要在编辑 html、css 和 javascript 时立即看到浏览器中的变化。但是尝试手动复制和跟踪它变得很耗时,我想自动化它。

我想要做的是使用 rsync 来确定我在 Apache web 目录中修改的文件,然后只将这些文件复制回 SVN。

我有一个我一直在测试的 rsync 命令,但我似乎遇到的问题是,由于已部署文件的时间戳都比 SVN 中的新,rsync 想要将所有文件复制回来,因为它看到了它们作为较新的文件。

我还尝试了 diff,它可以检测文件差异。我想我可以组合一个 shell 脚本,它可以使用 diff、grep 和 cp 的组合来完成这项工作,但我想看看 rsync 是否可以成为一个多合一的解决方案。

rsync -avuzn --exclude=web-inf/classes/ --exclude=web-inf/lib/ /var/www/web-inf /usr/local/src/svn/WEB-INF
4

4 回答 4

3

我建议直接在 Web 服务器中进行 subversion checkout。您应该为所有名为的文件添加拒绝指令,以便远程用户不会将其识别为颠覆检出。.svn

于 2009-10-01T21:21:59.720 回答
0

您没有说明部署脚本如何将文件移动到集成服务器,也不清楚是否涉及一台以上的机器或集成服务器文件位于哪种文件系统上。如果脚本执行正确的操作,您可以在最初发送文件时保留文件的修改时间。既然您可以使用 rsync 将它们带回来,那么您不能一开始也使用 rsync 来发送它们吗?除此之外, scp -p 是另一种传输方式,同时保留许多属性。

不过,这种工作流程听起来像是为分布式版本控制系统(如mercurialgit )量身定制的。

于 2009-10-01T21:24:46.453 回答
0

我不明白你到底在做什么?一般来说,您应该在自己的计算机上进行开发。您的 svn 存储库应该位于您的站点目录中,以便您可以通过 localhost 在浏览器中实时查看该站点。我以同样的方式将 Rails 与 git 一起使用。我的本地 ruby​​ 服务器转到 localhost:3000,我可以开发并不断查看我在做什么。然后,当我的编码达到一个不错的点时,我承诺使用 git 并部署到我的测试服务器。站点完成后,将进入生产环境。当我在 php/mysql 中编码时,我在自己的本地 apache 服务器上进行测试,然后在完成后直接 ftp 到测试或生产服务器。

这就是你应该工作的方式。没有理由从您的测试或生产服务器复制东西。你的版本控制系统应该做所有的同步。本地开发,远程测试,然后部署到生产。这是最好的方法。

于 2009-10-02T02:35:05.360 回答
0

我还尝试了自动部署,并且在我编写了自己的 rsync-script 之后......(易于使用但对安装要求很高,我遇到了DeployIt ......试一试......

http://deployit.monavari.de/

于 2011-10-06T21:35:33.343 回答