Git pull 依赖于当前目录

标签 git git-pull

我正在尝试通过 root 用户从任何目录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 pulling 命令?

如何避免冗余的cd

最佳答案

在您的第一个示例中,git 命令以用户 dmalikov 的身份运行,当前目录为 /root。由于 git pull 命令等同于 git fetch 后跟 git merge,并且由于 git merge 操作在工作树上,git 尝试寻找工作树。由于该用户没有 cd/root 的权限,因此 git 命令失败。

即使您的第二个示例也无法像您预期的那样工作。如果有实际的更改要 pull (而不是“已经是最新的”),那么 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 pull 依赖于当前目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851644/

相关文章:

python - gitlab-CI 如何从也引用 gitlab 存储库的 gitlab 依赖项安装私有(private) python 包

git - 为什么 --autostash 选项不起作用??? (与 git pull --rebase 一起使用)

git - merge 、更新和 pull Git 分支而不使用 checkout

git - git pull 后如何解决冲突?

git - 从 Git 历史记录中删除敏感文件及其提交

java - 对于要从​​ Eclipse IDE 使用的 Maven 项目,建议的 Git 存储库结构是什么

ruby-on-rails - 为什么有时会得到 `lock' : deadlock detected (fatal) error?

git - clone 和 mkdir->cd->init->remote-add->pull 有什么区别?

git - 为什么 git pull 会挂起?

从我 fork 的仓库中 pull 时发生 Git 冲突,即使我做的最后一件事是从中 pull