在容器中共享 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 中查詢 AllowAgentForwarding 選項(通常位於 /etc/ssh/sshd_config 或 %programdata%\ssh\sshd_config)。如果尚未設定,您應將其設定為 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 發行版中安裝
gpg。sudo apt install gpg - 在 WSL 發行版中註冊
pinentryGUI。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 中進行配置。Dev Container 無法訪問在 Git Bash 中設定的 gpg 金鑰,即使它位於您的
~/.gnupg/資料夾中,並且在 Windows 資源管理器中可訪問。
接下來,透過更新 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 才能使更新生效。