Git拉力取决于当前的dir。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我在试着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

扫码关注云+社区