与您的容器共享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-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

在最后一行,将替换为您的特定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用户,必须使用Windows GUI或CLI(powershell/cmd)配置gpg签名密钥,而不是在Git Bash中。即使Dev Container可以访问Windows资源管理器中的~/.gnupg/文件夹,也无法访问在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

要应用您的配置更改,您需要重新构建容器。您可以通过从命令面板运行Dev Containers: Rebuild ContainerF1)来完成此操作。下次容器启动时,您的GPG密钥也应该可以在容器内访问。

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