Подтвердить что ты не робот

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?

4b9b3361

Ответ 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./поскольку текущий каталог, очевидно, работает, поскольку у каждого есть права на изменение в этом каталоге.