核心代码非常简单,我只是使用 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();
清理所有传入到启动进程的环境变量
参考文档:
Git - Git 钩子