root用户的脚本git pull作为另一个用户

时间:2013-11-09 04:04:54

标签: linux git bash ubuntu

我有一个脚本,我想在另一个用户的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 username

2 个答案:

答案 0 :(得分:6)

在没有-i选项的情况下尝试使用sudo。该选项记录为首先更改为目标用户的主目录,该目录撤消在此之前您仔细执行的目录更改。或者,使用适当的选项git来指定目录,如下所示:

sudo -u username -i git --git-dir=/home/username/GitProject/.git --work-tree=/home/username/GitProject pull

答案 1 :(得分:0)

这可以在没有sudo的情况下完成。这假设您有无密码的ssh密钥,因为您正在讨论脚本。这是失败:

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

这表明~正确扩展到用户的homedir:

# 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.
相关问题