遠端儲存庫
2021 年 6 月 10 日,作者:Brigit Murtaugh,@BrigitMurtaugh、Eric Amodio,@eamodio
注意:自此部落格文章發布以來,「Remote Repositories」擴充功能已重新命名為 GitHub Repositories。您也可以查看最新文件,其中將包含關於此擴充功能的最更新資訊。
我們很高興為各位介紹適用於 Visual Studio Code 的全新 Remote Repositories 擴充功能!這是我們與 GitHub 的朋友們合作建立的全新體驗,旨在讓您在 VS Code 內快速且安全地處理原始碼儲存庫。
開啟原始碼儲存庫的更快方式
在 VS Code 中,我們從一開始就提供對 Git 的整合支援,並且透過擴充功能支援許多其他原始碼控制管理 (SCM) 提供者。這讓開發人員可以直接在 VS Code 中複製並處理儲存庫。
然而,開發人員每天所做的大部分工作都涉及閱讀其他人的程式碼:檢閱提取要求、瀏覽開放原始碼儲存庫、試驗新技術或專案、檢查上游相依性以偵錯應用程式等等。所有這些工作的共通點在於,第一步通常是將儲存庫複製到本機,然後在您最愛的程式碼編輯器(我們希望是 VS Code!)中開啟程式碼。然而,複製儲存庫既耗時,如果您忘記提取,可能會讓您檢閱過時版本的儲存庫,而且如果您不熟悉程式碼,有時可能會有安全風險。
由 GitHub 發布的全新 Remote Repositories 擴充功能,讓在 VS Code 中開啟原始碼儲存庫的體驗變得即時又安全。有了這個擴充功能,您可以直接從 VS Code 內快速瀏覽、搜尋、編輯和提交至任何遠端 GitHub 儲存庫(以及即將推出的 Azure Repos),無需複製!
您可以處理任意數量的儲存庫,而無需在本機儲存任何原始碼。「Remote Repositories」為您節省時間和本機磁碟空間,並讓您完全在 VS Code 內完成所有原始碼控制工作。
在這篇部落格文章中,我們將探討開始使用「Remote Repositories」有多容易、在開啟您的第一個遠端儲存庫後可以做些什麼、支援此虛擬環境的技術細節,以及您今天可以如何向我們提供意見反應。
在 VS Code 中開啟您的第一個遠端儲存庫
讓我們在 VS Code 中開啟一個遠端儲存庫。首先,請確認您已安裝 Remote Repositories 擴充功能。
目前,「Remote Repositories」支援 GitHub 儲存庫,即將推出對 Azure Repos 的支援。在這篇部落格文章中,我們先從開啟 VS Code 儲存庫 (microsoft/vscode) 開始。
安裝「Remote Repositories」擴充功能後,我們可以立即存取其開啟遠端儲存庫命令,方法是按一下 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 }
請記住,擴充功能可能未實作在無法存取本機檔案系統的情況下處理虛擬工作區,因此擴充功能可能無法如預期般運作。
您已開啟儲存庫,接下來呢?
在您的儲存庫開啟的情況下,「Remote Repositories」讓您輕鬆地為專案貢獻。
簡化的 Git 工作流程,讓您的專案保持在最新狀態
「Remote Repositories」協助您每次都保持在儲存庫的最新版本,無需任何複雜的 Git 命令。
每當您開啟新的儲存庫時,您開啟的是最新版本。每當「Remote Repositories」偵測到 GitHub 有新的變更時,它會在狀態列中列出您需要提取的認可數量
並在檔案總管中醒目提示已修改的檔案
當您提交變更時,這些變更會自動顯示在 GitHub 上 – 您不需要推送您的變更或發布您建立的任何新分支。
建立或簽出提取要求
「Remote Repositories」與 GitHub Pull Requests and Issues 擴充功能搭配良好,可讓您直接在 VS Code 中檢閱和管理來自 GitHub 的提取要求和議題。並行使用這兩個擴充功能,即可快速簽出 PR 並處理議題,而無需在本機複製程式碼或離開 VS Code。
您只需按幾下滑鼠,即可變更您的程式碼、根據該變更建立新的分支和提取要求 (PR),然後簽出 PR。
您可以在我們的使用 GitHub 文章中深入瞭解 GitHub Pull Requests and Issues 擴充功能。
將變更隔離在分支中
當您完成工作時,可能需要在分支之間切換。在典型的環境中,當您需要決定要存放或提交哪些變更時,這可能會變得棘手。
「Remote Repositories」可讓您輕鬆地同時處理不同的分支。當您暫停在一個分支上的工作並切換到新的分支時,系統不會詢問您是否要存放變更 – 這些變更會自動保留在先前的分支上。當您回到先前的分支時,您的變更仍然存在,您可以從上次中斷的地方繼續。
讓我們探索如何將變更推送至分支。
在狀態列中,選取您目前的分支以開啟分支清單,例如「main」
選取+ 建立新分支...,然後輸入您分支的名稱
然後您可以切換到該新分支
新的分支將不包含您先前分支的任何變更。
限制
使用「Remote Repositories」時存在某些限制
- 偵錯、終端機和工作 – 目前不支援。終端機在本機檔案系統上開啟,且無法存取遠端儲存庫的虛擬檔案系統。
- 有限的語言智慧 – 諸如 IntelliSense 和移至定義等功能可能會受到影響,因為許多語言尚不瞭解「Remote Repositories」的虛擬化環境。
- 搜尋 – GitHub 搜尋本身有其限制,例如不編製分支索引。「Remote Repositories」可以避免此限制,並透過啟用索引編製來執行全文檢索。索引編製會從 GitHub 提取儲存庫的淺層複製,並在本機執行完整搜尋,提供比 GitHub 的模糊預設分支原生搜尋更強大的功能。您可以從 [搜尋] 檢視在「Remote Repositories」中啟用索引編製。
- 擴充功能限制 – 並非所有擴充功能都支援在虛擬工作區中執行,但隨著時間推移,將有更多擴充功能支援。嚴重依賴存取本機檔案的擴充功能無法支援此設定。如需更多詳細資訊,請參閱下方的虛擬工作區章節 below。
我們才剛開始這段旅程,因此預期隨著我們繼續開發,功能集將會擴展,而限制將會縮小。
在更強大的環境中繼續工作
使用「Remote Repositories」,VS Code 在並非所有功能都可用的環境中運作,因為沒有實體檔案系統。這對於快速開始瀏覽儲存庫非常棒,但是當您準備好進行一些更「進階」的工作時,例如
- 您想要積極處理儲存庫並獲得 VS Code 的完整功能。
- 您需要透過定期從遠端提取來主動追蹤儲存庫的變更。
為了移至更進階的工作流程,「Remote Repositories」提供一種讓您「升級」環境並在其中繼續工作的方式,從您目前所在的位置繼續。
按一下左下角的遠端指示器,然後選取繼續在以下項目上工作...。
您將看到三個選項
- 在本機複製儲存庫:將目前的儲存庫複製到您的本機電腦。將會彈出本機檔案總管,讓您選取磁碟上的位置以複製遠端儲存庫。
- 在容器磁碟區中複製儲存庫:使用 Dev Containers 擴充功能,在 Docker 容器磁碟區中複製目前的儲存庫(您需要安裝 Dev Containers 擴充功能和 Docker)。VS Code 將會重新載入並使用 Dev Containers 連線,且遠端指示器現在會顯示 Dev Container: {映像名稱}。
- 在 Codespaces 中開啟:在 GitHub Codespace 中繼續您的工作。當您選取此選項時,瀏覽器會開啟並將您導向此儲存庫的 Codespaces 清單。
現在我們已探索如何在 VS Code 中使用「Remote Repositories」,我們想要說明一些為此體驗提供技術支援的詳細資訊,以及您如何確保您的擴充功能在「Remote Repository」工作階段中運作。
虛擬檔案系統與工作區
為此遠端工作提供支援的核心概念是虛擬檔案系統和虛擬工作區。
身為最終使用者,您只需要知道您想要處理哪個儲存庫或 PR – VS Code 會為您處理虛擬檔案系統並管理您的工作區。身為擴充功能開發人員,您會想要採用虛擬檔案系統 API,以確保您的擴充功能如預期般運作。
虛擬檔案系統的運作方式
當您在傳統的 git 工作流程中工作時,您會「git clone」一個儲存庫,而副本會儲存到您電腦的本機檔案系統。但是當使用「Remote Repositories」時,程式碼並非位於您的本機電腦上;它仍然只在 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」,並且迫不及待想收到您的意見反應。
請安裝 Remote Repositories 擴充功能。您可以提交任何問題或功能要求,或在 Twitter 上推文給我們您的想法 @code。
您也可以查看我們關於如何使用「Remote Repositories」擴充功能的全新 YouTube 影片。
如果您是擴充功能作者,請查看擴充功能作者虛擬工作區支援指南,並在我們的追蹤議題中分享任何問題或意見反應。您也可以加入擴充功能作者社群 Slack 群組。
祝您編碼愉快!
Brigit Murtaugh,VS Code 專案經理 @BrigitMurtaugh
Eric Amodio,VS Code 資深軟體工程師 @eamodio