Git pull取决于当前的dir

时间:2012-03-24 12:12:29

标签: git git-pull

我正试图通过任何目录中的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

3 个答案:

答案 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。 /因为当前目录显然有效,因为每个人都有权更改到该目录。