环境
Windows 11
WSL2(Ubuntu 22.04)
前言
众所周知,WSL2 的跨系统IO读写性能非常差(详情见我之前写的这篇文章),而我的代码又是在 WSL2 中运行的,为了提高性能,所以我的代码也必须放在 WSL2 中,以避免跨系统的IO读写。
但是最近遇到一个问题,如果你的代码是用SVN进行管理的话,在Windows中,是无法使用 TortoiseSVN 工具将代码仓库 checkout
到 WSL2 的目录中的。checkout
的时候,TortoiseSVN会提示:
从 svn://svn.svnbucket.com/ljfrocky/test01 取出, 版本 HEAD, 全递归, 包含外部引用
sqlite[S5]: database is locked, executing statement 'PRAGMA
case_sensitive_like=1;PRAGMA synchronous=OFF;PRAGMA
recursive_triggers=ON;PRAGMA foreign_keys=OFF;PRAGMA locking_mode =
NORMAL;PRAGMA journal_mode = TRUNCATE;'
另一进程正在阻塞当前工作版本的数据库,或者底层操作系统不支持文件锁定;如果当前工作版本位于网络文件系统上,请确保文件服务器已允许文件锁定。
根据提示,猜测是 Windows 系统无法对 WSL2 中的文件系统进行锁定,从而导致 TortoiseSVN 检出代码失败。
解决方法
既然在 Windows 系统上无法检出,那我们改为到 WSL2 中检出不就行了?
在 WSL2 中安装好 svn 工具,然后使用svn co {代码仓库地址}
命令检出代码,显示成功了:
代码检出成功了,那现在可以用 TortoiseSVN 管理此目录的代码了吗?答案是还是不行,还是会报“文件系统无法锁定”的错误。
网上查找相关资料,也没有找到解决方法。看来想要在 Windows 上管理 WSL2 上的SVN仓库代码,目前是无法实现的,只能在 WSL2 的命令行界面中进行管理。但对于用惯了图形界面的人来说,突然要改为用命令行操作,可能会不太习惯。
那么有没有其它方法呢?有!我们知道 IDE 工具一般都带有代码版本管理功能,我们可以使用 Jetbrains 家 IDE 工具的远程开发模式来做开发,在远程开发模式中,我们可以使用 IDE 提供的图形化界面来管理 WSL2 中的代码。下面以 PhpStorm 来举例说明。
注:必须使用 IDE 的远程开发模式,如果使用本地模式的话,在进行代码版本管理的时候,还是会跟 TortoiseSVN 一样报错的。
远程开发模式
1)在PhpStorm的欢迎界面中,选择 Remote Develoment -> WSL -> New Project
2)然后选择你的 WSL2 系统,一般是 Ubuntu
3)选择一个你希望使用的 IDE 版本,还有项目所在目录,点击“Start IDE and Connect”。
根据 Jetbrains 的文档说明,点击 Start IDE 后,会在 WSL2 中安装一个 IDE backend 的后端服务程序,然后在Windows上会打开一个 thin client(瘦客户端),后续我们在瘦客户端上执行的操作,都会同步给后端服务,由后端服务来真正实施。其实就是由原来的单一程序架构,变成了 前端 - 后端 的架构。
4)在瘦客户端中,我们可以正常进行代码版本管理(代码提交、回滚、查看提交日志等等),不会再报错了!