如何使用 WSL/linux 同步 windows 上的代码文件?

Posted

技术标签:

【中文标题】如何使用 WSL/linux 同步 windows 上的代码文件?【英文标题】:How to synchronize code files on windows with WSL/linux? 【发布时间】:2019-03-03 20:54:43 【问题描述】:

基本上,我有一些 C/C++ 代码需要在 Linux 机器上构建和调试。不幸的是,我的 Windows 笔记本电脑没有足够的可用硬盘空间来安装一些 Linux dist,也没有足够的可用 RAM 来舒适地运行 VM。

到目前为止,我使用 WSL 处理它还算舒服,但规模相当小。通过 CLI 和 gdb 编辑和调试 2-3 个 .c 文件很容易,但在大型项目中变得非常烦人。

我想要一些简单的东西,比如“在 windows IDE [X] 中编辑代码,在远程 Linux/WSL 上编译它(该项目使用 Makefiles),最好通过 gdb 调试它”。

VS 有一些接近我想要的东西,但它不能处理现有的 Linux 项目。它需要创建一个与项目的 Makefile 不同的新配置。

【问题讨论】:

IIRC,WSL通过/mnt/c//mnt/d/等方式访问Windows文件系统 @Shawn 是的,但强烈建议不要修改“共享”文件。 一个选项是将项目放在 Linux 系统上,并通过 Windows 机器中的 Sublime 或 Atom 文本编辑器远程打开它们,并保持 SSH 会话与调试/构建项目并行打开。 @Arshan 这可能会导致问题,因为 WSL 预计某些元数据会附加到文件中,并且在 Windows 上编辑这些元数据可能会导致错误(即使它们在最新更新中有所改善,我仍然不推荐) . 【参考方案1】:

我不确定 C 和 C++,但听起来这与我每天在 node 和 javascript 中工作的方式完全相同。

我在 WSL 中使用 git 将我的代码签出到像 /mnt/c/code/myproject 这样的位置。然后使用 sublime/VS code/webstorm 我在 Windows 中的位置 c:\code\myproject 中编辑文件,这非常有效,并且已经每天这样做了一年多。

需要注意的是,您需要确保您选择的编辑器以 linux 行结尾保存文件,并且所有命令行操作都在 WSL 中完成。

请参阅此article 以了解 windows 和 linux 文件之间的差异以及其在 WSL 中的工作方式。

【讨论】:

接受这个,因为这与我最终做的类似。【参考方案2】:

我想要一些简单的东西,比如“在 windows IDE 中编辑代码,在远程 linux/WSL 上编译它

您将拥有这么简单的东西。 不过只有Windows 19.03:

见“Updated WSL in Windows 10 version 1903 lets you access Linux files from Windows”

微软的 Craig Loewen 说:

过去,从 Windows 创建和更改 Linux 文件会导致文件丢失或数据损坏。使这成为可能是一个高度要求和期待已久的功能。我们很自豪地宣布,您现在可以从 Windows 轻松访问 Linux 发行版中的所有文件。

那么这是如何工作的呢?他接着解释说:

简单地说:9P 协议文件服务器促进文件相关请求,Windows 充当客户端。

我们已修改 WSL 初始化守护程序以包含 9P server。此服务器包含支持 Linux 元数据的协议,包括权限。 有一个 Windows 服务和驱动程序充当客户端并与 9P 服务器(在 WSL 实例中运行)进行通信。 客户端和服务器通过 AF_UNIX 套接字进行通信,因为 WSL 允许使用 AF_UNIX 在 Windows 应用程序和 Linux 应用程序之间进行互操作,如 this post 中所述。

警告:

旧规则仍然适用,您不应访问 AppData 文件夹内的 Linux 文件! 如果您尝试通过 AppData 文件夹访问您的 Linux 文件,您将绕过 9P 服务器,这意味着您将无法访问您的 Linux 文件,并且您可能会损坏您的 Linux 发行版。

【讨论】:

【参考方案3】:

我知道这个问题有点老了,但我认为解决方案是在 WSL 文件夹和 Window 文件夹之间建立一个符号链接。这就是我为 Ubuntu-20.04 WSL 处理它的方式:

    以管理员模式访问 PowerShell 在 PowerShell 中键入 cmd.exe 打开 cmd.exe 后,键入 mklink /d C:\<path_to_your_Windows_folder> \\wsl$\Ubuntu-20.04\home\<your_user>\<path_to_your_WSL_folder>

编辑 这是在带有 WSL2 的 Windows 10 版本 2004 下测试的

【讨论】:

这不是只对 WSL2 有效吗?您是否将 WSL2 与 W10 2004 一起使用? (docs.microsoft.com/en-us/windows/whats-new/…) 我确实在使用 WSL2 和 W10 2004,但是根据***.com/a/56434613/1391121,自 W10 1903 起可以访问 wsl 文件夹。我猜只要我们可以通过网络接口访问 wsl 文件夹,mklink 就可以正常工作

以上是关于如何使用 WSL/linux 同步 windows 上的代码文件?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 进程和 WSL Linux 进程之间的共享内存

windows 安装wsl linux 到非系统盘

游戏开发实战手把手教你在Windows上通过WSL运行Skynet,不用安装虚拟机,方便快捷(WSL | Linux | Ubuntu | Skynet | VSCode)

游戏开发实战手把手教你在Windows上通过WSL运行Skynet,不用安装虚拟机,方便快捷(WSL | Linux | Ubuntu | Skynet | VSCode)

Windows安装WSL2和docker

Windows平台下如何使用rsync实现文件同步