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