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