通过PowerShellLibJava调用git am报empty ident name错误如何解决
问题根因
该报错本质是程序调用PowerShell子进程时的运行上下文和手动打开的PowerShell上下文不一致,具体触发原因有两个:
- 你写的命令中,管道后的
git am没有显式指定目标仓库路径,子进程默认工作目录不是你的项目根目录,导致git无法读取本地仓库的user.name、user.email配置 - PowerShellLibJava启动子进程时默认未完整继承当前用户的
HOME、USERPROFILE等环境变量,导致git也无法读取全局身份配置,最终判定身份为空
解决方案
方案1(最稳妥,无环境依赖)
给git命令显式指定仓库路径,同时通过-c参数临时注入身份配置,完全规避上下文读取问题,修改后的命令如下:
git --git-dir=c:/Path/to/project/.git --work-tree=c:/Path/to/project format-patch -1 [sha value] --stdout | git --git-dir=c:/Path/to/project/.git --work-tree=c:/Path/to/project -c user.name="你的实际用户名" -c user.email="你的实际邮箱" am -3 --ignore-whitespace --ignore-space-change
方案2(修复运行上下文)
构造PowerShell实例时,显式设置工作目录和用户环境变量:
- 调用
PowerShellBuilder.workingDirectory()方法,将工作目录指定为你的项目根目录(即.git文件夹所在的上级目录) - 把当前系统用户的
HOME、USERPROFILE环境变量添加到PowerShell子进程的环境变量列表中,确保git可以读取到全局配置
方案3(简化上下文配置)
执行git命令前先切换工作目录,修改命令结构如下:
Set-Location c:/Path/to/project; git format-patch -1 [sha value] --stdout | git am -3 --ignore-whitespace --ignore-space-change
内容的提问来源于stack exchange,提问作者Chilly Code
相关产品推荐
相关产品推荐

