内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我在试着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
被回避?
在第一个示例中,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)
要让它与--git-dir一起工作,还需要指定一个work-tree目录。
sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull