我正在尝试使用git / gitolite部署我的网站。
我已经创建了一个远程存储库,我将其克隆到我的本地计算机上。
我有2个分支掌握和发展。
我已经创建了一个post-receive hook脚本,以便将每个分支部署到正确的web目录中:
/var/www/<mysite>/
for branch Master [live version]
/var/www/<mysite>/dev
用于分支开发[dev version]
为此我在.gitolite/hooks/common/post-receive
文件中使用此脚本:
#!/bin/bash
prodroot="/var/www/<mysite>"
devroot="/var/www/<mysite>/dev"
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
sudo git --work-tree=$prodroot checkout -f
sudo chown -R webuser:psacln $prodroot
else
echo "Push on dev branch"
sudo git --work-tree=$devroot checkout -f
sudo chown -R webuser:psacln $devroot
fi
done
如果我这样使用它,它就无法正常工作,因为checkout -f
总是得到主分支,如果我使用checkout -f $branch
我会收到错误说:
fatal: '/home/git/repositories/<mysite>.git' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
每件事都倒下了,我不得不创建存储库[使用gitolite]。
我想要理解的是:如果它不是git目录,为什么它适用于checkout -f
[MASTER]而不适用于checkout -f $branch
[这里开发]?
我错过了什么吗?请帮帮我。
谢谢。
答案 0 :(得分:0)
在这种类型的钩子中,试试t:
unset GIT_DIR
--git-dir=/path/to/your/repo.git
。这样,任何work-tree=
命令都会确切地知道它应该执行的位置(git
)和git repo(--work-tree
)。
答案 1 :(得分:0)
试试这个Coloq
if [ "master" == "$branch" ]; then
cd $prodroot
sudo git pull //first time do git clone
sudo chown -R webuser:psacln $prodroot // what group is psacln ?