Git Portable 64 Bash не работает в планировщике задач Windows Server 2016

Мне нужна помощь, чтобы выяснить, почему команды репозитория Git не выполняются при запуске в сценарии в планировщике задач Windows Server 2016. Все работает нормально, когда я выполняю их в командной консоли.

В планировщике задач Windows Server 2016 мое действие "Запустить программу": C:\Apps\repo.scripts\UpdateMyRepo.bat

Код команды UpdateMyRepo.bat:

SET HOME=C:\Users\Repo
REM change to MyRepo git working repository
C:
cd \MyRepo
REM execute my script bash script to update my repository
C:\Apps\Git\bin\bash.exe --login -i -c "/c/Apps/repo.scripts/UpdateMyRepo.sh"

UpdateMyRepo.sh Bash- код является

#!/c/Apps/Git/bin/bash.exe -x
export HOME=/c/Users/Repo
cd /c/MyRepo
# write a log entry so we know we are in the repository folder
ls -al > /c/Apps/repo.scripts/myrepofolder.log
# write the git --version to a log file so we know git is working
/c/Apps/Git/bin/git.exe --version > /c/Apps/repo.scripts/version.log
# write the git status to a log file so we know git repository commands work
/c/Apps/Git/bin/git.exe status > /c/Apps/repo.scripts/status.log
# write a done log entry and quit the bash shell
echo done > /c/Apps/repo.scripts/done.log
exit

В Windows 2016 Task Scheduler все работает, кроме команды git status. Git status записывает пустой пустой файл status.log. На самом деле, это похоже на любые другие команды, такие как git add, git commit, git push и т. д., которые воздействуют на хранилище, выдают пустой вывод.

Если я выполню команду вручную, войдя в систему как пользователь Repo, и дважды щелкните на C:\Apps\repo.scripts\UpdateMyRepo.bat в проводнике Windows или при запуске в консоли все работает отлично, и git-статус репозитория записывается в файл status.log. Я получаю "нулевые" результаты при выполнении задачи из планировщика задач вручную или по триггеру.

Пожалуйста, помогите мне понять, как запускать команды git-репозитория в планировщике задач Windows Server 2016. Я уже пробовал слишком много вариантов команд, сценариев и разрешений, чтобы перечислить все, которые здесь не работали.

Сведения о платформе: Windows Server 2016 Standard, все текущие обновления Файлы репозитория Git Portable 64bit, 2.17.1.windows.2 хранятся в операционной системе и на локальном жестком диске планировщика задач, а не в сетевой папке.


обновление: когда я запускаю задачи репозитория Git в планировщике задач WS2016 и выясняю, как записать некоторые выходные данные, я получаю следующую ошибку:

fatal: this operation must be run in a work tree

Папка хранилища НЕ является "пустым" хранилищем. Поэтому я подозреваю, что планировщик задач WS2016 применяет дополнительные ограничения разрешений, которые не применяются к учетной записи пользователя, назначенной в задаче. Я получаю ту же ошибку, если пытаюсь запустить задачи в консоли администратора вместо обычной пользовательской консоли.

1 ответ

Решение

Во-первых, большинство команд Git записывает свой вывод в stderr, а не в stdout

Так что вам нужно перенаправить stderr в stdout, используя, например, &> вместо >,

Во-вторых, чтобы убедиться, что все ваши команды Git будут выполняться в правильном рабочем дереве / репо, вы можете добавить переменные окружения для расположения репозитория.

export GIT_WORK_TREE=/c/path/to/my/repo
export GIT_DIR=/c/path/to/my/repo/.git
Другие вопросы по тегам