假设我们管理一个网站http://example.com及其更新的测试版本http://new.example.com使用 Subversion(SVN)。
以下做法是否是个好主意:
- 自动更新网站(http://example.com)每次更新 STABLE 分支时;
- 自动更新测试站点(http://new.example.com) 当 HEAD 分支更新时。
如果是,那么使用哪个软件来更新网站?rsync?SVN 配置中到底要写什么?
答案1
“使用 Subversion 管理站点”的定义太过常见且不清晰。如何你能做到吗?
- 工作副本位于本地开发箱中,某些特殊主机和站点上的存储库是未版本控制的文件,是导出存储库的结果
- 站点是存储库的附加“仅更新”工作副本
任何状况之下:
- 两层(DEV 和 PROD 空间)开发是广泛使用的方法
- 开发可能反映主干的状态(不需要额外的分支和合并到分支的操作),取决于您的工作流程
- 为开发团队提供共享开发空间非托管自动更新有一个严重的缺陷——在开发人员的测试中,更新后挂钩的愚蠢变化可能会在提交后被另一个开发人员的下一次提交覆盖。
“使用哪种软件来更新网站?”问题的答案取决于“如何管理网站”和“可以使用哪些访问方法来更新网站”问题的答案。因为它们(软件和方法)可以
svn up
- SCP
- FTP
- 同步
以及或多或少复杂的提交后钩子
编辑
如果未版本控制的树与 repo 位于同一主机上,则可以在提交后钩子中使用
- 完整导出 repo-tree:
svn export file:///<PATH-TO-REPO> <TEMP-DIR> & mv -r <TEMP-DIR> <SITE-ROOT>
或者
- 仅导出修订版中已更改的文件:
svnlook changed
为您提供已更改文件列表及其相对路径,您必须收集这些文件并将其复制到正确的目标位置。示例
>svnlook.exe -r 24 changed .
U trunk/Hello.de.txt
U trunk/Hello.en.txt
U trunk/Hello.fr.txt
您必须处理状态(第一列)A|U(已添加/已更新),也许还有D(已删除)
可以使用 来验证每次提交的目标(处理文件前的预检查)svnlook dirs-changed
。对于与上例相同的修订版本
>svnlook.exe -r 24 dirs-changed .
trunk/