GitHub 代码空间

GitHub Codespaces为任何活动提供云驱动的开发环境——无论是长期项目,还是短期任务如审查拉取请求。你可以在Visual Studio Code或基于浏览器的编辑器中作这些环境。

GitHub Codespaces 扩展

环境

环境是 GitHub Codespace 的“后端”部分。所有与软件开发相关的计算工作都在这里进行:编译、调试、恢复等等。当你需要做一个新项目、接手新任务或审查一个PR时,你只需搭建一个云托管环境,GitHub Codespaces就能正确配置它。它会自动配置你项目所需的一切:源代码、运行时、编译器、调试器、编辑器、自定义点文件配置、相关编辑器扩展等等。

定制化

GitHub Codespaces 可以根据每个项目完全自定义。这通过包含一个devcontainer.json类似于 VS Code 开发容器的开发。

自定义示例包括:

  • 设置基于Linux的作系统使用。
  • 自动安装各种工具、运行时和框架。
  • 转发常用端口。
  • 设置环境变量。
  • 配置编辑器设置和安装首选扩展。

具体代码空间的相关内容请参见配置代码空间文档devcontainer.json设定。

每个用户配置的点文件

点文件是指文件名以点(.)开头的文件。它们通常包含应用程序的配置信息,并可控制终端、编辑器、源码控制及其他各种工具的行为。.bashrc,.gitignore, 和.editorconfig是开发者常用的点文件示例。

你可以指定一个包含你的点文件、文件目标位置以及创建代码空间时的安装命令的 GitHub 仓库。

请参阅《个性化码空间》文档,了解如何将你的点文件配置添加到代码空间中。

入门

两个 GitHub Codespaces 客户端都有入门主题。这些链接将帮助你快速登录 GitHub Codespaces,创建第一个代码空间,并通过你偏好的客户端连接:

扩展作者

VS Code 扩展 API 隐藏了大部分远程运行的实现细节,所以很多扩展可以在 GitHub Codespaces 环境中运行,无需修改。不过,我们建议你在代码空间中测试扩展,以确保其所有功能都能正常工作。详情请参阅支持远程开发和GitHub代码空间的文章。

基于浏览器的编辑器

你还可以在浏览器中免费、轻量级地使用Visual Studio Code。基于网页的编辑器让你可以安全快速地浏览 GitHub 的源代码仓库,并进行轻量级代码修改。你可以在编辑器中打开任何仓库、分支或拉取请求,编辑器具备许多VS Code的功能,包括搜索和语法高亮。如果你想运行或调试代码,可以切换到云托管环境或VS Code桌面。

要访问这个基于浏览器的编辑器,你可以进入 github.com 的仓库并按 .(句号键)或将仓库的 URL 更改为github.dev/org/repo,替换github.com其中github.dev.

限制:如果你运行浏览器的无痕模式或启用广告拦截器,可能无法使用基于网页的编辑器。

:本编辑器目前处于技术预览阶段。你今天就可以试用,并在 https://github.co/browser-editor-feedback 提供反馈。

已知的局限性与适应

在使用Codespace,特别是在网页版中使用VS Code时,有一些限制需要注意。其中一些限制通过变通或适应机制,提供一致的开发体验。

对于某些问题(尤其是键盘快捷键或桌面上列出的变通方法),你可以安装并使用 Codespace 作为渐进式网页应用(PWA)。

在 Microsoft Edge 中以 PWA 方式安装 Codespaces

子嗣 原因 变通方法
Ctrl+Shift+P 在 Firefox 中无法启动命令面板。 Ctrl+Shift+P 在 Firefox 中是保留的。 F1启动指令面板。
某些默认的键盘快捷键(用于调试)在网页上是不同的。 由于浏览器可能已经注册了这些快捷键的动作,我们会调整网页版 VS Code 的默认设置。 使用调整后的默认值。它们会出现在调试作上方的提示悬停。
  • 所有浏览器的跨步切换都是Alt+F10(而不是F10)。
  • 在 Windows 浏览器中,进入网页时是 Alt+F11(而不是 F11)。
调试的F11在macOS网页或桌面上都不工作。 这是一个已知的非浏览器特定限制。更多信息可见第5102期 在macOS上禁用F11以显示桌面。
  • 前往:系统偏好设置>键盘>快捷键
  • 取消勾选“显示桌面F11”选项
在网页版中,Ctrl+N 键新文件不起作用。 Ctrl+N 会打开一个新窗口。 在桌面上用 Ctrl+N 表示新文件。
Ctrl+W关闭编辑器在网页版中不起作用。 Ctrl+W 会关闭浏览器当前的标签页。 Ctrl+W 在桌面上是可以的。
Ctrl+Shift+B 不会切换浏览器中的收藏栏。 Codespaces 覆盖了这个功能,并重定向到命令面板中的“构建”菜单。 目前没有任何解决办法。
从VS Code拖拽文件到Codespace(反之亦然)是不起作用的。 你可以在#115535期看到更多背景。 有几种选择:
  • 你可以在代码空间里右键点击文件,下载到本地机器。
  • 你可以从文件资源管理器中拖动文件到你的代码空间。
Angular应用调试在网页版中并不支持。 出于安全原因,浏览器中运行的代码不能以调试模式启动另一个浏览器实例。 你有几个选择:
  • 正常调试Node.js/服务端的 js。
  • 在桌面端打开代码空间,这样伴工具将用于启动本地 Edge 或 Chrome 安装。
从浏览器下载无扩展名的文件会自动添加“.txt” 这就是Chrome和Edge的表现方式。 背景及未来可能的解决方案见#118436期。
当你从远程(包括代码空间)下载文件时,诸如可执行位等属性会被移除。 相关背景和潜在的未来解决方案可见于#112099期 目前没有任何解决办法。
你可以看到提示,”Your_codespace_name当尝试从Codespace下载某些文件夹时,无法打开这个文件夹,因为它包含系统文件。 用户代理可以自由对敏感目录施加限制层级。更多信息请参见本规范Chromium的封锁列表 除了规格和黑名单外,没有其他变通办法。
手动访问http://localhost:forwarded_port无法访问网页中代码空间转发的端口。 这基于Codespaces处理端口转发并生成正确网页URL的方式。 点击端口转发通知中的链接打开你的应用,或者点击端口视图中的地球图标,这两个都会提供正确生成的链接。更多信息请参见Codespaces文档

有些扩展在网络上的表现不同

扩展 问题 / 原因 变通方法
带有键盘快捷键的扩展与浏览器快捷键重叠,例如 Git Graph,它使用 Ctrl+R 来刷新。 键盘快捷方式可能与现有的浏览器快捷方式重叠,例如在 Safari 中按 Ctrl+R 刷新窗口。 你可以使用基于桌面的Codespace,而非基于网页的Codespace,充分利用你的键盘快捷键。不同浏览器的行为也可能不同(你可以在Chrome中刷新Git Graph)。
语言包,例如Visual Studio Code的日语语言包 目前基于网页的代码空间不支持语言包扩展。 你可以使用基于桌面的代码空间来使用语言包并配置显示语言。
对阵上色器2 它在浏览器中无法运行,因为它会引入安装位置依赖,且难以解决。 使用包围对上色器
浏览器调试器,如Firefox的调试器 需要UI/桌面扩展主机的扩展不会在浏览器中加载。 你可以在本地的VS Code中使用这些扩展(不连接Codespaces)。或者,当你的应用运行在代码空间中时,你可以使用替代工具,比如 Chrome DevTools 来检查元素并设置断点。
打开浏览器的扩展,比如在浏览器中打开 需要UI/桌面扩展主机的扩展不会在浏览器中加载。 如果可能的话,使用替代扩展,比如Live Server
项目经理 项目经理依赖于同步自定义projects.json该文件目前不支持 你可以在桌面版Codespaces或本地VS Code中使用扩展名来保存和管理项目,因为这些选项不需要同步自定义文件。
依赖Chrome的扩展,如Protractor Test RunnerBrowser Preview Chrome 不包含在 Codespace 中。 试着找其他经验,或者你可以在本地VS Code(不连接Codespaces)里用这些扩展来做项目。
Flutter(以及Flutter整体开发) 由于 Docker 容器和代码空间的特性,Flutter 工作流程的多个方面受到限制。
  • Flutter 建议从 Snap 安装,但 Snap 不能安装在 Codespaces 容器中。
  • Android 模拟无法在容器中运行。
  • 代码空间无法检测插入你机器的USB设备,这使得物理设备上的开发变得不可能。
  • Codespace 和其他 Linux 环境一样,不支持 iOS 开发。
你可以用本地VS Code来开发Flutter。
LaTeX 工作坊 该扩展提供了三种功能来帮助 LaTeX 创作:1)一组显示常见命令的视图,2)PDF 预览器,3)语言功能,如摘要和 IntelliSense。该扩展功能相当完整,但存在一些网页或安全限制。 以下变通方法解决了视图和预览功能领域的限制:
  • 视图本身正常工作,但有些命令会尝试启动原生应用程序,比如在作系统文件资源管理器中显示输出文件夹。这些在网页上没有作用,所以用桌面端是另一种选择。
  • “latex-workshop.view.pdf.viewer”- 该设置提供类似于 Markdown 预览的 PDF 预览器。你可以在浏览器标签页、独立的 PDF 查看器或 VS Code 标签页中预览。
    只有浏览器标签页在基于网页的 Codespaces 中可用。独立的 PDF 查看器无声失效,VS Code 标签页出现了内容安全策略问题。VS Code 标签查看器还有其他功能,但由于这个限制,这些功能无法使用。
Git 图 部分 Git Graph 网页视图功能在 Codespaces 中可能受限。例如,在提交文件和 Git Graph 网页视图之间切换时,可能会显示该网页视图被清空。 你可以在VS Code桌面版中完整使用Git Graph。
其他远程开发扩展(WSL、开发容器、远程 - SSH)无法安装在代码空间中。 代码空间本身就是一个远程环境。 如果你想在其他远程环境下运行(比如 WSL 或远程 SSH 电脑),打开 VS Code 桌面(不连接 Codespace),然后启动其他远程扩展。如果你想用自定义开发容器,也可以用同样的.devcontainer无论是代码空间还是开发容器。
My_Favorite_Extension不起作用,也没在上面列出。 还有一些其他问题可能阻碍功能在远程环境中正常工作。 在某些情况下,你可以用其他命令来绕过这个问题,但在其他情况下,扩展可能需要修改。查看关于常见远程问题的远程分机技巧及解决建议。

常见问题

为什么浏览器里不能安装扩展

有少数扩展内置假设或需要在桌面上运行。例如,当扩展访问桌面上VS Code安装的文件,或扩展依赖于必须在桌面环境中运行的可执行文件时。当你尝试在浏览器中安装此类扩展时,会被告知该扩展不可用。

请注意,当连接到桌面运行的VS Code代码空间时,这种扩展仍然可以使用。

我该如何让 VS Code 访问我的剪贴板以便阅读?

在某些情况下,VS Code可能会在阅读剪贴板时请求你访问剪贴板的权限。你应该可以通过浏览器设置(搜索“网站权限”)或在右侧地址栏中寻找这个选项来授权访问剪贴板:

允许浏览器访问剪贴板

一旦你授权VS Code访问剪贴板,就可以重新尝试该作。

我该如何让 VS Code 始终打开新的标签页和窗口?

有时浏览器会出于安全考虑,阻止 VS Code 打开新的标签页或窗口。如果发生这种情况,VS Code 会检测到阻断动作并明确提示用户。不过,你可以通过浏览器导航栏的右键菜单打开网站设置,并启用弹出窗口,让 VS Code 始终打开新的窗口和标签页。

允许浏览器弹窗

我如何允许浏览器中的 VS Code 访问本地文件和文件夹?

在浏览器中打开VS Code中的本地文件和文件夹需要浏览器支持文件系统访问API。截至目前,Microsoft Edge 和 Google Chrome 都提供了这种级别的支持。如果你想在浏览器中使用 VS Code 访问本地文件和文件夹,请考虑切换到这两种浏览器中的一个。

问题或反馈

如果你有疑问,可以参考GitHub Codespaces的故障排除指南。如果你想提供反馈,可以在 GitHub Codespaces 讨论区提交议题。