bat 文件未在任务计划程序中以通用用户身份运行 git Push

问题描述 投票:0回答:1

我已经在任务计划程序中设置了一个计划,以作为通用用户运行包含 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

任务计划程序属性如下所示:

常规选项卡

  • 用户帐户设置为“genericUser”
  • 选择“无论用户是否登录都运行”
  • 选中“以最高权限运行”

“操作”选项卡

  • 操作设置为“启动程序”

在此操作的属性中:

  • 程序/脚本设置为
    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 batch-file windows-task-scheduler
1个回答
0
投票

从评论中,您可以:

  • 使用
    git.exe
    的完整路径而不是
    git
    call D:\path\to\git
    。这可以确保调用正确的可执行文件而不会产生歧义。
  • 添加
    2>&1
    ,将所有命令的标准输出和错误输出重定向到
    log.txt
    。这将捕获任何错误消息。
  • use
    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

特别注意谁在运行脚本:检查任务的安全选项以确保它以正确的用户身份运行。

© www.soinside.com 2019 - 2024. All rights reserved.