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