以其他用户身份运行 git pull 的 root 脚本

6

我有一个脚本希望能够在另一个用户的git目录中进行git pull。该脚本是由root用户运行的。例如:

cd /home/username/GitProject
sudo -u username -i git pull

当我运行此代码时,会出现以下结果:
fatal: Not a git repository (or any of the parent directories): .git

有没有办法让我的脚本以用户名的身份执行git pull操作?


尝试将 git pull 替换为 pwd,并查看它打印出什么。 - John Zwinck
我得到了/home/username - nwalke
2个回答

8
不要使用sudo的-i选项进行尝试。该选项首先更改为目标用户的主目录,这会撤销您在此之前仔细执行的目录更改。或者,使用适当的git选项指定目录,类似于以下内容:
sudo -u username -i git --git-dir=/home/username/GitProject/.git --work-tree=/home/username/GitProject pull

我添加了额外的git参数。谢谢! - nwalke

2

这可以在不使用sudo的情况下完成。这假设你有无需密码的ssh密钥,因为你在谈论一个脚本。以下是故障原因:

# git clone <user>@<host>:/path/to/repo
Cloning into 'repo'...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

这表明~正确地扩展为用户的主目录:
# MYUSER=somebody
# su - $MYUSER -c "echo ~"
/home/somebody

以下是用于克隆到主目录的实际命令以及一些额外的证明:

# su - $MYUSER -c "git clone <user>@<host>:/path/to/repo"
Cloning into 'repo'...
remote: Counting objects: 13, done.
<..>

# ls -l /home/$MYUSER/repo/.git/config
-rw-r--r-- 1 somebody somebody 275 Nov  8 23:55 /home/somebody/repo/.git/config

# su - $MYUSER -c "cd ~/repo; git remote -v"
origin <user>@<host>:/path/to/repo (fetch)
origin <user>@<host>:/path/to/repo (push)

# su - $MYUSER -c "cd ~/repo; git pull"
Already up-to-date.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接