5

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

4

2 回答 2

7

尝试不使用-isudo 选项。该选项被记录为首先更改到目标用户的主目录,这会撤消您在此之前仔细进行的目录更改。或者,使用适当的 git 选项来指定目录,如下所示:

sudo -u username -i git --git-dir=/home/username/GitProject/.git --work-tree=/home/username/GitProject pull
于 2013-11-09T04:17:51.503 回答
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.
于 2013-11-09T05:06:24.433 回答