远程仓库
2021 年 6 月 10 日,作者:Brigit Murtaugh, @BrigitMurtaugh, Eric Amodio, @eamodio
注意:自本博客文章发布以来,远程仓库扩展已重命名为 GitHub Repositories。您还可以查阅 最新文档,其中包含有关该扩展的最新信息。
我们很高兴推出 Visual Studio Code 的新 远程仓库 扩展!这是我们与 GitHub 的朋友合作构建的全新体验,旨在实现快速安全地在 VS Code 中使用源代码仓库。
一种更快的方式来打开源代码仓库
VS Code 从一开始就提供了对 Git 的集成支持,并且我们通过扩展支持了许多其他源代码管理 (SCM) 提供程序。这使得开发人员可以直接在 VS Code 中克隆和使用仓库。
然而,开发人员日常工作中有很大一部分涉及阅读他人的代码:审查拉取请求、浏览开源仓库、尝试新技术或项目、检查上游依赖项以调试应用程序等。所有这些的共同点是,作为第一步,您通常会先在本地克隆仓库,然后在您喜爱的代码编辑器(我们希望是 VS Code!)中打开代码。然而,克隆仓库需要时间,如果您忘记拉取更新,可能会导致您审查过时的仓库版本,如果您不熟悉代码,有时还会带来安全风险。
由 GitHub 发布的全新 远程仓库 扩展,使在 VS Code 中打开源代码仓库的体验变得即时且安全。借助此扩展,您可以直接在 VS Code 中快速浏览、搜索、编辑和提交到任何远程 GitHub 仓库(以及即将支持的 Azure Repos),无需克隆!
您可以随意处理任意数量的仓库,而无需在您的机器上保存任何源代码。远程仓库为您节省时间和本地磁盘空间,并使您能够完全在 VS Code 中完成所有源代码管理任务。
在这篇博客文章中,我们将探讨使用远程仓库入门是多么容易,打开您的第一个远程仓库后可以做什么,支持此虚拟环境的技术细节,以及您今天如何向我们提供反馈。
在 VS Code 中打开您的第一个远程仓库
让我们在 VS Code 中打开一个远程仓库。首先,请确保您已安装 远程仓库 扩展。
目前,远程仓库支持 GitHub 仓库,即将支持 Azure Repos。在这篇博客文章中,我们将首先打开 VS Code 仓库 (microsoft/vscode)。
安装远程仓库扩展后,通过单击 VS Code 左下角的远程指示器,我们可以立即访问其 打开远程仓库 命令(以及您安装的任何其他 远程开发扩展 的命令)
如果您之前没有从 VS Code 登录过 GitHub,系统会提示您对 GitHub 帐户进行身份验证。登录后,搜索仓库或 PR,选择您想要的,即可开始使用。
在下面的简短视频中,我们搜索并选择了 VS Code 仓库,VS Code 重新加载,并且仓库内容加载就像我们在本地克隆它一样。
您无需离开 VS Code 即可探索仓库并为其贡献代码。您会感觉就像在处理本地代码一样,使用熟悉的 VS Code 界面,并且可以使用 VS Code 资源管理器、搜索、时间线视图、快速打开以及源代码管理等功能。
您现在已连接到一个被称为虚拟工作区(有关虚拟工作区的更多信息请参见下文)的环境;远程指示器显示“GitHub”。当您将鼠标悬停在远程指示器上时,系统会通知您在虚拟工作区中某些功能不可用
虚拟工作区是一种特殊设置,某些功能(如扩展)会被禁用或功能受限。通过点击将鼠标悬停在远程指示器上时显示的 某些功能 链接,您可以轻松查出哪些扩展被禁用。
点击该链接会显示哪些扩展被禁用以及哪些扩展的功能受到限制。将鼠标悬停在扩展上时可以看到受限的功能。
如果您想在虚拟工作区中手动启用某个扩展,可以在用户 settings.json
文件中使用 extensions.supportVirtualWorkspaces
设置。
"extensions.supportVirtualWorkspaces": { "<extensionID>": true }
请记住,某些扩展可能并未实现用于处理无法访问本地文件系统的虚拟工作区,因此这些扩展可能无法按预期工作。
您已打开仓库,接下来怎么办?
打开仓库后,远程仓库使您能够轻松地为项目做贡献。
简化的 Git 工作流程,让您的项目保持最新
远程仓库帮助您每次都使用仓库的最新版本,无需任何复杂的 Git 命令。
每次打开新仓库时,您都会打开最新版本。每当远程仓库检测到 GitHub 有新变化时,它会在状态栏中列出您需要拉取多少个提交。
并在资源管理器中突出显示已修改的文件
当您提交更改时,它们会自动显示在 GitHub 上——您无需推送更改或发布您创建的任何新分支。
创建或检出拉取请求
远程仓库与 GitHub Pull Requests and Issues 扩展 很好地协同工作,该扩展允许您直接在 VS Code 中审查和管理来自 GitHub 的拉取请求和问题。并行使用这两个扩展可以快速检出 PR 并处理问题,而无需在本地克隆代码或离开 VS Code。
您只需点击几下,就可以修改代码,创建一个新分支,并基于该修改创建一个拉取请求(PR),然后检出该 PR。
您可以在我们的 使用 GitHub 文章中了解更多关于 GitHub Pull Requests and Issues 扩展的信息。
将更改隔离到分支
在完成工作时,您可能需要在分支之间切换。在典型环境中,当您需要决定暂存或提交哪些更改时,这可能会变得棘手。
远程仓库让您可以轻松地同时处理不同的分支。当您在一个分支上暂停工作并切换到新分支时,系统不会询问您是否要暂存更改——它们将自动保留在前一个分支上。当您回到前一个分支时,您的更改仍会在那里,您可以接着之前的工作继续。
让我们看看如何将更改推送到分支。
在状态栏中,选择您当前的分支以打开分支列表,例如“main”
选择 + 创建新分支... 并输入您的分支名称
然后您可以切换到该新分支
新分支将不包含来自您之前分支的任何更改。
限制
使用远程仓库时存在某些限制
- 调试、终端和任务 - 目前不支持。终端在您的本地文件系统上打开,无法访问远程仓库的虚拟文件系统。
- 有限的语言智能 - 由于许多语言尚无法理解远程仓库的虚拟化环境,像智能感知和 转到定义 等功能可能会受到影响。
- 搜索 - GitHub 搜索本身存在限制,例如不索引分支。远程仓库可以通过启用索引来避免此限制并执行全文搜索。索引会从 GitHub 拉取仓库的浅层克隆并在本地执行全文搜索,这比 GitHub 原生的模糊默认分支搜索更强大。您可以在远程仓库的搜索视图中启用索引。
- 扩展限制 - 并非所有扩展都支持在虚拟工作区中运行,但随着时间的推移,将有更多扩展支持。严重依赖于访问本地文件的扩展无法支持此设置。有关更多详细信息,请参阅下文的虚拟工作区部分。
我们刚开始这段旅程,因此随着我们继续开发,功能集会不断增长,限制会不断减少。
在更强大的环境中继续工作
使用远程仓库时,VS Code 在一个并非所有功能都可用的环境中运行,因为没有物理文件系统。这非常适合快速开始浏览仓库,但当您准备进行一些更“高级”的工作时,该怎么办呢,例如:
- 您想积极地 在仓库上工作 并获得 VS Code 的全部功能。
- 您需要通过定期 从远程拉取 来积极跟踪仓库的变化。
为了转移到更高级的工作流程,远程仓库提供了一种方法,让您可以“升级”您的环境并在那里继续工作,从您当前的位置继续。
点击左下角的远程指示器,然后选择 继续在以下位置工作...。
您将看到三个选项
- 在本地克隆仓库:将当前仓库克隆到您的本地机器。将弹出一个本地文件资源管理器,允许您选择磁盘上的位置来克隆远程仓库。
- 在容器卷中克隆仓库:使用 Dev Containers 扩展在 Docker 容器卷 中克隆当前仓库(您需要安装 Dev Containers 扩展和 Docker)。VS Code 将重新加载并使用 Dev Containers 连接,远程指示器现在将显示 开发容器: {镜像名称}。
- 在 Codespaces 中打开:在 GitHub Codespace 中继续工作。当您选择此选项时,浏览器将打开并引导您前往此仓库的 Codespaces 列表。
现在我们已经探讨了如何在 VS Code 中使用远程仓库,接下来我们将介绍一些支持此体验的技术细节,以及如何确保您的扩展可以在远程仓库会话中工作。
虚拟文件系统和工作区
支持这项远程工作的核心概念是虚拟文件系统和虚拟工作区。
作为最终用户,您只需要知道要处理哪个仓库或 PR——VS Code 会为您处理虚拟文件系统并管理您的工作区。作为扩展开发者,您会希望采用虚拟文件系统 API,以确保您的扩展按预期行为。
虚拟文件系统的工作原理
在传统的 git 工作流程中,您会“git clone”一个仓库,并将副本保存到您计算机的本地文件系统。但是当使用远程仓库时,代码并不存储在您的本地计算机上;它仍然只在 GitHub 上。
您通过虚拟文件系统使用代码,虚拟文件系统是对物理存在于磁盘上的文件的一种抽象。虚拟文件系统可以从像 GitHub 这样的代码托管平台、云存储或数据库提供内容,并无缝地将这些内容作为文件提供给 VS Code 中的用户。
当您在虚拟文件系统上打开工作区时,这被称为虚拟工作区。在虚拟工作区中工作时,您仍然可以访问 VS Code 功能,包括扩展。
确保您的扩展在虚拟工作区中工作
为了让扩展正常工作,它们必须支持虚拟文件系统。
当一个扩展没有代码,而只是纯粹的颜色主题、键绑定、代码片段或语法扩展时,它可以在虚拟工作区中运行,无需进行适配。
运行实际代码的扩展,即定义了主要入口点的扩展,需要进行检查并可能需要进行适配。
虚拟文件系统的 API 支持 是通过 FileSystemProvider
接口提供的。文件系统提供程序会为一个新的 URI Scheme(例如 vscode-vfs
)注册,该文件系统上的资源将使用该 Scheme 的 URI 来表示(vscode-vfs://github/microsoft/vscode/package.json
)。
扩展的 package.json
中有一个 capabilities
属性,其中的 virtualWorkspaces
子属性用于表明该扩展是否支持虚拟工作区。
您可以在 虚拟工作区扩展作者指南 中了解更多关于虚拟文件系统、工作区以及如何为扩展实现它们的信息。
反馈与进一步阅读
我们非常激动能让您尝试远程仓库,并期待您的反馈。
请安装 远程仓库 扩展。您可以提交任何 问题或功能请求,或通过 @code 向我们发送您的想法。
您还可以观看我们关于如何使用远程仓库扩展的新 YouTube 视频。
如果您是扩展作者,请查阅 虚拟工作区对扩展作者的支持指南,并在我们的 跟踪问题 中分享任何问题或反馈。您还可以加入扩展作者社区 Slack 群组。
祝您编码愉快!
Brigit Murtaugh,VS Code 项目经理 @BrigitMurtaugh
Eric Amodio,VS Code 首席软件工程师 @eamodio