Git pull取决于当前的dir

ДМИ*_*КОВ 18 git git-pull

我正在git pull通过root用户从任何目录尝试某个存储库.

例如,在执行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
Run Code Online (Sandbox Code Playgroud)

并执行git pull来自/:

#> cd /
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

为什么当前目录会影响git pull命令?

如何cd避免多余的?

amc*_*abb 17

在第一个示例中,git命令以dmalikov具有当前目录的用户身份运行/root.由于该git pull命令等效于git fetch后跟a 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
Run Code Online (Sandbox Code Playgroud)

这对我没有任何错误.

2)您可以添加cd到工作树:

(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull)
Run Code Online (Sandbox Code Playgroud)