我已经在任务计划程序中设置了一个计划,以作为通用用户运行包含 git 命令的 bat 文件。
此bat文件包含以下命令:
cd C:\repo
call D:\path\to\git --git-dir=C:\repo\.git add --all > log.txt
call D:\path\to\git --git-dir=C:\repo\.git -c user.name="genericUser" -c user.email="[email protected]" commit --author="genericUser <[email protected]>" -m "message" >> log.txt
echo Pushing changes... >> log.txt
set GIT_TRACE=true
call D:\path\to\git --git-dir=C:\repo\.git push origin main >> log.txt
EXIT /B
任务计划程序属性如下所示:
在此操作的属性中:
C:\Window\System32\cmd.exe
/c start "" "C:\repo\commit.bat"
C:\repo
当我运行计划时,它会运行所有内容,但当它点击 git push 命令时就会卡住。
我已为此通用用户设置了 Windows 凭据,并以通用用户身份成功推送。 git config --global user.name 和 user.email 也已为此通用用户设置。在 git bash 中手动运行 git 命令时,我没有收到 git Push 上的凭据提示。
我的全局 .gitconfig 看起来像这样:
[credential]
helper = manager
[user]
name = genericUser
email = [email protected]
[commit]
name = genericUser
email = [email protected]
从评论中,您可以:
git.exe
的完整路径而不是 git
或 call D:\path\to\git
。这可以确保调用正确的可执行文件而不会产生歧义。2>&1
,将所有命令的标准输出和错误输出重定向到 log.txt
。这将捕获任何错误消息。cd /D C:\repo
确保即使当前目录位于不同的驱动器上,脚本也能正常工作。EXIT /B
。HOMEDRIVE
和 HOMEPATH
的问题,显式设置变量。/D /C C:\repo\commit.bat
,以便更直接地调用批处理文件。您的脚本将是:
@echo off
cd /D C:\repo
:: Set environment variables explicitly for Git
set HOMEDRIVE=C:
set HOMEPATH=\Users\genericUser
set GIT_TRACE=true
set PATH=%PATH%;D:\path\to\git\bin
:: Capture both standard output and error output for all commands
D:\path\to\git.exe --git-dir=C:\repo\.git add --all >> log.txt 2>&1
D:\path\to\git.exe --git-dir=C:\repo\.git -c user.name="genericUser" -c user.email="[email protected]" commit --author="genericUser <[email protected]>" -m "message" >> log.txt 2>&1
echo Pushing changes... >> log.txt
D:\path\to\git.exe --git-dir=C:\repo\.git push origin main >> log.txt 2>&1
特别注意谁在运行脚本:检查任务的安全选项以确保它以正确的用户身份运行。