我有一个脚本希望能够在另一个用户的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操作?
-i
选项进行尝试。该选项首先更改为目标用户的主目录,这会撤销您在此之前仔细执行的目录更改。或者,使用适当的git选项指定目录,类似于以下内容:sudo -u username -i git --git-dir=/home/username/GitProject/.git --work-tree=/home/username/GitProject pull
这可以在不使用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.
git pull
替换为pwd
,并查看它打印出什么。 - John Zwinck/home/username
。 - nwalke