В первом примере команда git запускается от имени пользователя dmalikov
с текущим каталогом /root
. Поскольку команда git pull
эквивалентна команде git fetch
, за которой следует git merge
, и поскольку git merge
работает с рабочим деревом, git пытается найти рабочее дерево. Поскольку у этого пользователя нет прав на cd /root
, команда git завершается неудачей.
Даже ваш второй пример не работает так, как вы ожидаете. Если есть фактические изменения, которые нужно извлечь (вместо «Уже в актуальном состоянии»), то git pull
завершится ошибкой, поскольку не может найти рабочее дерево.
У вас есть несколько простых опций:
1) Вы можете просто выполнить часть операции git fetch
, выполнив:
sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git fetch
, что не дает мне никакой ошибки.
2) Вы можете добавить cd
к рабочему дереву:
(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull)