与您的容器共享 Git 凭据

Dev Containers 扩展提供了对在容器内使用本地 Git 凭据的开箱即用支持。在本节中,我们将介绍两种受支持的方案。

如果您尚未在本地设置用户名或电子邮件地址,系统可能会提示您进行设置。您可以在本地机器上通过运行以下命令来完成此操作

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

该扩展程序会在启动时自动将您的本地 .gitconfig 文件复制到容器中,因此您无需在容器内进行此操作。

使用凭据助手 (Credential Helper)

如果您使用 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 中。即使密钥位于可通过 Windows 资源管理器访问的 ~/.gnupg/ 文件夹中,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 才能使更新生效。

© . This site is unofficial and not affiliated with Microsoft.