與容器共享 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 發行版中安裝
gpg
。sudo 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 以使更新生效。