SVN更新:覆盖现有的未版本化文件。

3
我试图将我们的网站完全置于版本控制之下。该网站和文件当前位于服务器上,我需要用带有版本的副本替换这些非版本化文件,而不删除目录或文件。
我尝试使用以下命令:
svn checkout --force https://myrepo/trunk .
svn revert -R .
这样做可以进行检出,但是我正在使用一些 svn externals 来替代某些现有目录。我得到了这个错误:
Fetching external item into 'production/JS': svn: warning: W155007: Can't obtain lock on non-directory
JS 是一个外部项目。我知道我可以简单地删除现有目录并执行更新或检出,然后所有内容都会在那里,但我不想把网站关闭足够长的时间来完成检出。
那么,我能不能在 svn 上施展魔法,让它用这些 externals 替换我的现有目录?

1
你找到解决方案了吗?我也有同样的问题,正在寻找真正的解决方案... - Roland Soós
你是否找到了“无法在非目录上获取锁定”的原因?我也遇到了同样的问题。 - IgorGanapolsky
1个回答

1
我建议不要从svn工作副本中提供您的网站。一个简单的部署脚本(由您的CI服务器运行)可以将您的源代码打包,(复制/提取/安装)到您的服务器上进行原子操作。 这个过程将高度依赖于您的网站/应用程序。 您可以通过将wwwroot符号链接到site-1.0.0来开始。 然后:
  1. 让您的构建机器(或CI服务器)打包您的源代码
  2. 拥有一个部署脚本将软件包复制到服务器上
  3. 将其提取/安装到site-1.0.1
  4. 交换指向site-1.0.0的符号链接以指向site-1.0.1
  5. 删除除最新5个版本之外的所有站点
这样做可以带来一些好处:
  • 使用原子部署,即使进行svn更新,您的站点可能会在短时间内处于不稳定状态
  • 通过移动符号链接,您可以快速轻松地恢复到已知状态
  • 它消除了某些人在服务器上本地编辑文件的风险(svn up不会撤消更新)
  • 您的构建/打包甚至部署脚本可以连接/缩小js
  • 该脚本还可以在任何缓存或CDN中过期内容

很抱歉这并没有直接回答您的问题,但我认为这值得一提。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接