我正试图通过任何目录中的root用户git pull
某个存储库。
例如,从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
命令?
如何避免多余的cd
?
答案 0 :(得分:17)
在第一个示例中,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)
答案 1 :(得分: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
答案 2 :(得分:0)
我不认为可以避免使用该CD,因为您使用无权将目录更改回当前目录(即/ root)的用户运行git。 /因为当前目录显然有效,因为每个人都有权更改到该目录。