如何在VSCode容器中自动复制多配置的Git凭证及关联配置文件?
VSCode官方文档《与容器共享Git凭证》提到,扩展启动时会自动把本地
.gitconfig文件复制到容器里。但要是按照《自动管理个人与工作Git配置》的方案,把Git配置拆成.gitconfig(带includeIf规则)、.gitconfig-work和.gitconfig-personal,会碰到俩问题:
- 关联的
.gitconfig-work和.gitconfig-personal不会自动复制到容器;- 就算手动复制成功,
includeIf里的本地目录路径在容器里也不生效。
你已经知道可以通过修改容器内.gitconfig的includeIf规则(比如[includeIf "gitdir:/home/worker/source"] path = .gitconfig-work)解决路径问题,下面说几种自动复制关联配置文件的可行方法:
方法1:用Dev Container配置挂载文件
直接在.devcontainer/devcontainer.json里添加mounts配置,把本地的关联配置文件绑定挂载到容器的用户主目录:
{ "mounts": [ "source=${localEnv:HOME}/.gitconfig-work,target=/home/worker/.gitconfig-work,type=bind,consistency=cached", "source=${localEnv:HOME}/.gitconfig-personal,target=/home/worker/.gitconfig-personal,type=bind,consistency=cached" ] }
注意把/home/worker换成容器里实际的用户主目录,consistency=cached能提升文件访问的性能。
方法2:容器创建后自动执行复制命令
在.devcontainer/devcontainer.json里配置postCreateCommand,让容器创建完成后自动复制本地的关联配置文件:
{ "postCreateCommand": "cp ${localEnv:HOME}/.gitconfig-work ${containerEnv:HOME}/.gitconfig-work && cp ${localEnv:HOME}/.gitconfig-personal ${containerEnv:HOME}/.gitconfig-personal" }
这个命令会在容器初始化完成后立刻执行,保证关联文件能同步到容器里。
方法3:统一存放配置文件,挂载整个目录
要是以后可能新增更多拆分的配置文件,可以把所有Git配置文件(.gitconfig、.gitconfig-work、.gitconfig-personal)都移到本地的~/.git-configs目录,然后修改主.gitconfig里的include路径指向这个目录下的文件,再在devcontainer.json里挂载整个目录:
{ "mounts": [ "source=${localEnv:HOME}/.git-configs,target=/home/worker/.git-configs,type=bind,consistency=cached" ] }
同时更新本地和容器内.gitconfig的include规则,比如:
[includeIf "gitdir:/home/worker/source/"] path = ~/.git-configs/.gitconfig-work
内容的提问来源于stack exchange,提问作者parsley72

