我正在尝试通过 root 用户从任何目录git pull
一些存储库。
例如从/root/
执行git pull
:
#> 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
?
最佳答案
在您的第一个示例中,git 命令以用户 dmalikov
的身份运行,当前目录为 /root
。由于 git pull
命令等同于 git fetch
后跟 git merge
,并且由于 git merge
操作在工作树上,git 尝试寻找工作树。由于该用户没有 cd/root
的权限,因此 git 命令失败。
即使您的第二个示例也无法像您预期的那样工作。如果有实际的更改要 pull (而不是“已经是最新的”),那么 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)
关于Git pull 依赖于当前目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851644/