我正在尝试将我们的网站置于完整的版本控制之下。该站点和文件当前存在于服务器上,我需要在不删除目录或文件的情况下用版本化副本替换那些非版本化文件。
我试过用
svn checkout --force https://myrepo/trunk .
svn revert -R .
然而,我使用了一些 svn externals 来代替一些现有的目录。我收到此错误: 将外部项目提取到“生产/JS”中: svn: warning: W155007: 无法获取非目录的锁
JS 是一个外部项目。我知道我可以简单地删除现有目录并进行更新或结帐,一切都会在那里,但我不想让网站关闭足够长的时间来进行结帐。
那么我可以对 svn 施展魔法,让它用这些外部文件替换我现有的目录吗?
最佳答案
我建议不要使用 svn 工作副本为您的站点提供服务。一个简单的部署脚本(由您的 CI 服务器运行)可以在您的服务器上自动打包您的源代码(复制/提取/安装)。 这是如何工作的将高度依赖于您的网站/应用程序。 您可以先将 wwwroot 符号链接(symbolic link)到 site-1.0.0,然后
- 让你的构建机器(或 CI 服务器)打包你的源代码
- 有一个将包复制到服务器的部署脚本
- 解压/安装到 site-1.0.1
- 将指向 site-1.0.0 的符号链接(symbolic link)替换为 site-1.0.1
- 删除站点的最新 5 个版本以外的所有版本
这会给你带来一些好处:
- 您获得了真正的原子部署,即使是 svn 更新也可能使您的站点在短时间内处于不稳定状态
- 您可以通过移回符号链接(symbolic link)快速轻松地恢复到已知状态。
- 它消除了某些人在服务器本地编辑文件的风险(svn up 不会撤消更新)
- 您的构建/打包甚至部署脚本可以连接/缩小您的 js
- 该脚本还可以使任何缓存或 CDN 中的内容过期
很抱歉,这不能直接回答您的问题,但我觉得值得一提。
关于svn 更新覆盖现有的非版本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869279/