Git вытягивание зависит от текущего каталога
Я пытаюсь выполнить git pull
некоторый репозиторий через пользователя root из любого каталога.
Например, выполнение git pull
из /root/
:
#> cd ~
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied
Cannot chdir to /root/., the toplevel of the working tree
И выполнив git pull
из /
:
#> cd /
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull
Already up-to-date.
Почему текущий каталог влияет на команду git pull
ing?
Как избежать этого избыточного cd
?
Ответы
Ответ 1
В первом примере команда 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)
Ответ 2
Чтобы ответить на мой собственный комментарий, /root был интересной ошибкой
Чтобы он работал с - git -dir, вам также необходимо указать каталог дерева работ
sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull
Ответ 3
Я не думаю, что можно избежать этого cd при запуске git с пользователем, у которого нет разрешения на изменение каталога обратно в текущий каталог, т.е./root./поскольку текущий каталог, очевидно, работает, поскольку у каждого есть права на изменение в этом каталоге.