如何使用提交后挂钩将提交的文件从SVN复制到Web目录?

时间:2020-03-06 14:47:40  来源:igfitidea点击:

我的Ubuntu服务器已安装Apache和Subversion。我仅将此服务器用作登台服务器,仅用于测试目的。我使用Apache托管Web应用程序,并使用Subversion保留源代码的版本副本。

我当前的工作流程:

  • 更改文件
  • 将文件提交到Subversion存储库
  • 通过SFTP将新文件上传到Apache公共目录
  • 在我的网络浏览器中查看更改

如果我的工作流程是这样,我会更加高兴:

  • 更改文件
  • 将文件提交到Subversion存储库
  • 在后台,Subversion将已提交文件的副本放入Apache公共目录中
  • 在我的网络浏览器中查看更改

我对服务器的管理经验很少,希望对我们有所帮助或者提供指导。我听说提交后挂钩是我所需要的,并且我可以编写bash脚本来执行此操作,但是我不确定从哪里开始并且经过大量的Google搜寻后并没有真正找到任何东西。

谢谢!

解决方案

"正式"的答案就在这里。

我正在管理我的存储库中的网站。每次提交后,如何使实时站点自动更新?

可以做到,但是自动将每次提交推送到生产网站并不总是一个好主意。有时还需要进行其他更改,并且由于存在新代码而导致站点中断,但是数据库架构尚未更新,只是令人尴尬。

相反,我倾向于做的是使服务器签出svn的副本,然后,一旦我准备好了所有必须发生的一切,就对其进行svn更新。

但是,如果我们确实需要,可以将命令放在提交后触发器中,这将自动为我们完成所有操作。这可能包括在服务器上运行迁移脚本(如果存在用于此更改的迁移脚本),以处理需要进行的任何非代码更改。

我认为我们应该问自己的一个真正的总体问题-当然,我们可能已经问过自己-是这样的:"在部署代码之前,我如何能最轻松地测试我的代码?"

我认为一个很好的答案是在开发盒上安装Apache并以自己的用户身份运行它,并在/ home / richardhenry / src / mywebsite(或者我们检出代码的任何地方)使用webroot和/或者cgi路径。

这样,我们甚至无需提交代码就可以测试代码。这样一来,我们就不会因断断续续或者无用的提交而使后备箱杂乱无章。通常,使独立事物保持独立往往是一个好主意(TM)。

或者,使用rsync将Web服务器与工作目录同步,或者编写一个脚本,将文件从dev框推送到登台服务器,并添加运行脚本的Makefile规则(或者调用rsync)。如果我们真的想花哨的话,请使用inotify或者其他文件通知监视器来自动运行脚本。