【问题标题】:Deploy website using Git/Gitolite [post-receive hook doesn't work properly]使用 Git/Gitolite 部署网站 [post-receive hook 无法正常工作]
【发布时间】:2013-12-19 17:57:47
【问题描述】:

我正在尝试使用 git/gitolite 部署我的网站。

我已经创建了一个远程存储库,我将它克隆到我的本地机器上。

我有 2 个分支 Master 和 development。

我创建了一个 post-receive 挂钩脚本,以便将每个分支部署到正确的 Web 目录中:

/var/www/<mysite>/ for 分支 Master [live version] /var/www/<mysite>/dev 分支开发 [开发版]

为此,我在.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 总是得到 master 分支,另一方面,如果我使用 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 [这里 DEVELOP] ?

我错过了什么吗?请帮帮我。

谢谢。

【问题讨论】:

    标签: git deployment web-deployment gitolite git-post-receive


    【解决方案1】:

    在这种类型的钩子中,试试 t:

    • 在脚本开头添加unset GIT_DIR
    • 除了 --work-tree= 选项外,始终使用--git-dir=/path/to/your/repo.git

    这样,任何git 命令都将确切知道它应该在哪里(--work-tree)和哪个git repo(--git-dir)被执行。

    【讨论】:

    • 谢谢VonC,我试过这种方式但它不起作用,我应该把我的远程存储库放在 --git-dir=/path/to/your/repo.git 吗?
    • @AdilOuchraa no:本地克隆 git repo 的路径。
    • 怎么做?我目前在远程,并且接收后的文件也在远程?
    • @AdilOuchraa 即你的钩子可以看到的本地克隆仓库的路径。
    • 我不明白你的意思@VonC,你能提供更多细节吗
    【解决方案2】:

    试试这个 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 ?
    

    【讨论】:

    • 很久以前 Colok :D 现在我正在使用 Ansible 执行部署操作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2018-10-13
    • 2015-03-22
    相关资源
    最近更新 更多