git 已知问题 命令行调用 git 时可能存在环境变量投毒问题
核心代码非常简单,我只是使用 git add 命令而已
var sourceFolder = @"C:\lindexi\Work\Source\";
var processStartInfo = new ProcessStartInfo("git")
{
ArgumentList =
{
"add",
"."
},
WorkingDirectory = sourceFolder,
};
Process.Start(processStartInfo)!.WaitForExit();
在 git 钩子里面调起进程的时候,会额外注入许多环境变量,比如 GIT_INDEX_FILE 和 GIT_DIR 等,这些环境变量是指定的是当前的 git 钩子所在的 git 仓库的
这就导致了我设置了 WorkingDirectory = sourceFolder 无效,直接导致 git add 内容到当前 git 钩子所在的仓库,而不是 sourceFolder 仓库
解决方法是清空环境变量,解决被 git 钩子投毒
var processStartInfo = new ProcessStartInfo("git")
{
ArgumentList =
{
"add",
"."
},
WorkingDirectory = sourceFolder,
};
// 这是在 git 里面调用的,会被注入 git 的环境变量,从而被投毒,如 GIT_INDEX_FILE GIT_DIR 等,导致加入的文件不是在要求的路径
processStartInfo.Environment.Clear();
Process.Start(processStartInfo)!.WaitForExit();
以上代码核心是使用 processStartInfo.Environment.Clear(); 清理所有传入到启动进程的环境变量
参考文档:
博客园博客只做备份,博客发布就不再更新,如果想看最新博客,请访问 https://blog.lindexi.com/
如图片看不见,请在浏览器开启不安全http内容兼容

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名[林德熙](https://www.cnblogs.com/lindexi)(包含链接:https://www.cnblogs.com/lindexi ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我[联系](mailto:lindexi_gd@163.com)。

浙公网安备 33010602011771号