參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

與容器共享 Git 憑據

Dev Containers 擴充套件開箱即用,支援在容器內部使用本地 Git 憑據。在本節中,我們將介紹兩種受支援的選項。

如果您尚未在本地設定使用者名稱或電子郵件地址,系統可能會提示您進行設定。您可以透過在本地計算機上執行以下命令來完成此操作:

git config --global user.name "Your Name"
git config --global user.email "your.email@address"

擴充套件程式會在啟動時自動將您的本地 .gitconfig 檔案複製到容器中,因此您無需在容器本身中執行此操作。

使用憑據助手

如果您使用 HTTPS 克隆儲存庫,並且在本地作業系統中配置了憑據助手,則無需進一步設定。您在本地輸入的憑據將在容器中重複使用,反之亦然。

使用 SSH 金鑰

在某些情況下,您可能使用 SSH 金鑰而不是憑據助手來克隆儲存庫。為了啟用此場景,如果本地 SSH 代理正在執行,擴充套件程式將自動轉發它。

首先,您應該確保在主機上啟用了SSH 代理轉發。在 sshd_config(通常位於 /etc/ssh/sshd_config%programdata%\ssh\sshd_config)中搜索 AllowAgentForwarding 選項。如果尚未設定,您應該將其設定為 yes 並重新載入或重新啟動 sshd 服務。

如果 SSH 代理正在執行,您可以使用 ssh-add 命令將本地 SSH 金鑰新增到代理中。例如,從終端或 PowerShell 執行以下命令:

ssh-add

它將新增預設檔案(~/.ssh/id_rsa.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/id_ed25519~/.ssh/identity)。如果您想指定金鑰,只需在命令後附加其路徑即可。

在 Windows 和 Linux 上,您可能會因為代理未執行而收到錯誤(macOS 通常預設執行代理)。按照以下步驟解決問題:

Windows:

啟動本地管理員 PowerShell 並執行以下命令:

# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

Linux

首先,在終端中執行以下命令,在後臺啟動 SSH 代理:

eval "$(ssh-agent -s)"

然後將這些行新增到您的 ~/.bash_profile~/.zprofile(對於 Zsh),以便它在登入時啟動:

if [ -z "$SSH_AUTH_SOCK" ]; then
   # Check for a currently running instance of the agent
   RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
   if [ "$RUNNING_AGENT" = "0" ]; then
        # Launch a new instance of the agent
        ssh-agent -s &> $HOME/.ssh/ssh-agent
   fi
   eval `cat $HOME/.ssh/ssh-agent` > /dev/null
   ssh-add 2> /dev/null
fi

在最後一行,將 <your ssh key> 替換為您特定的 SSH 金鑰。

例如 ssh-add $HOME/.ssh/id_ed25519 2> /dev/null

如果您遇到任何問題,您可能需要檢視 Dev Containers 擴充套件程式的已知限制

共享 GPG 金鑰

如果您想使用 GPG 簽署提交,您也可以將本地金鑰與容器共享。您可以在 GitHub 文件中找到有關使用 GPG 金鑰簽名的方法。

如果您尚未設定 GPG,您可以為您的平臺配置它:

  • Windows 上,您可以安裝 Gpg4win
  • macOS 上,您可以安裝 GPG Tools
  • Linux 上,本地使用系統的包管理器安裝 gnupg2 包。
  • WSL
    • 在 Windows 端安裝 Gpg4win
    • 在您的 WSL 發行版中安裝 gpgsudo apt install gpg
    • 在您的 WSL 發行版中註冊 pinentry GUI。echo pinentry-program /mnt/c/Program\ Files\ \(x86\)/Gpg4win/bin/pinentry.exe > ~/.gnupg/gpg-agent.conf
    • 在 WSL 中重新載入 gpg 代理。gpg-connect-agent reloadagent /bye

注意:對於 Windows 使用者,GPG 簽名金鑰必須使用 Windows GUI 或 CLI(powershell/cmd)配置,而不是在 Git Bash 中配置。即使它在您的 ~/.gnupg/ 資料夾中,在 Windows 資源管理器中可訪問,Dev Container 也無法訪問 Git Bash 中設定的 GPG 金鑰。

接下來,透過更新您的 Dockerfile 在容器中安裝 gnupg2

例如

RUN apt-get update && apt-get install gnupg2 -y

或者如果作為非 root 使用者執行

RUN sudo apt-get update && sudo apt-get install gnupg2 -y

要應用配置更改,您需要重建容器。您可以透過從命令面板 (F1) 執行 Dev Containers: Rebuild Container 來完成此操作。下次容器啟動時,您的 GPG 金鑰也應該在容器內部可訪問。

注意:如果您之前在容器中使用過 gpg,您可能需要執行 Dev Containers: Rebuild Container 以使更新生效。