我正在尝试通过根用户从任何目录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
?
发布于 2012-03-27 01:35:58
在第一个示例中,git命令以当前目录/root
的dmalikov
用户身份运行。由于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)
发布于 2012-03-27 02:57:28
为了回答我自己的评论,/root是一个有趣的错误
要让它与--git-dir一起工作,您还需要指定一个工作树目录
sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull
发布于 2012-03-24 20:41:20
我不认为当你用一个没有权限将目录切换回当前目录的用户运行git时,避免这张cd是可能的,也就是/root。/ as当前目录显然是有效的,因为每个人都有权限更改到该目录。
https://stackoverflow.com/questions/9851644
复制相似问题