遠端倉庫
2021 年 6 月 10 日,作者:Brigit Murtaugh (@BrigitMurtaugh) 和 Eric Amodio (@eamodio)
注意:自本部落格文章釋出以來,“遠端倉庫”(Remote Repositories)擴充套件已更名為“GitHub 倉庫”(GitHub Repositories)。您還可以檢視最新文件,其中包含有關該擴充套件的最新資訊。
我們很高興推出適用於 Visual Studio Code 的新“遠端倉庫”(Remote Repositories)擴充套件!這是我們與 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”。

選擇 + Create New Branch...(+ 建立新分支...)並輸入分支名稱。

然後您可以切換到該新分支。

新分支將不包含來自先前分支的任何更改。
限制
使用“遠端倉庫”時存在某些限制
- 除錯、終端和任務 - 當前不支援。終端在本地檔案系統上開啟,並且無法訪問遠端倉庫的虛擬檔案系統。
- 有限的語言智慧 - 像 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子屬性用於指示擴充套件是否適用於虛擬工作區。
您可以在虛擬工作區擴充套件作者指南中瞭解有關虛擬檔案系統、工作區以及如何為擴充套件實現它們的更多資訊。
反饋和延伸閱讀
我們非常期待您試用“遠端倉庫”,並期待您的反饋。
請安裝“遠端倉庫”擴充套件。您可以提交任何問題或功能請求,或在 @code 上發推文告訴我們您的想法。
您還可以檢視我們關於如何使用“遠端倉庫”擴充套件的新YouTube 影片。
如果您是擴充套件作者,請檢視面向擴充套件作者的虛擬工作區支援指南,並在我們的跟蹤問題中分享任何問題或反饋。您還可以加入擴充套件作者社群的 Slack 群組。
編碼愉快!
Brigit Murtaugh, VS Code 專案經理 @BrigitMurtaugh
Eric Amodio, VS Code 首席軟體工程師 @eamodio
