我在bitbucket服务器中存储了一个工作树,并启用了git-flow。我有2个分支,分别是develop
(分段)和master
(生产)。登台和生产存储在不同的服务器中。当我将文件推送到git pull
分支时,我想在服务器上自动执行develop
命令。我已经在/var/www/test-dev/.git/hooks
中创建了接收后文件。
GIT_WORK_TREE
是bitbucket的克隆存储库
GIT_DIR
从bitbucket克隆的文件
我尝试从本地提交,并将其推送到bitbucket,从本地提取更新的文件,但后脚本似乎无法正常工作。我还通过运行命令chmod u+x post-receive
使接收后脚本可执行。
以下是接收后的示例:-
GIT_WORK_TREE="git@bitbucket.org:username/test.git"
GIT_DIR="/var/www/test-dev"
DEPLOY_ALLOWED_BRANCH="develop"
echo "***** GIT_DIR: $GIT_DIR"
echo "***** GIT_WORK_TREE: $GIT_WORK_TREE"
while read oldrev newrev refname
do
BRANCH=$(git rev-parse --symbolic --abbrev-ref $refname)
NEWREV="$newrev"
if [ "$DEPLOY_ALLOWED_BRANCH" == "$BRANCH" ]; then
git checkout -f "${BRANCH}" || exit 1
git reset --hard "$NEWREV" || exit 1
fi
echo "githook: Will deploy '${BRANCH}' branch to the project '${GIT_DIR}'"
done
exit 0
我尝试手动执行post-receive
,但是我正在获取用于分支的空字符串。我希望输出将是开发分支。
这是我执行接收后的消息
***** GIT_DIR: /var/www/test-dev
***** GIT_WORK_TREE: git@bitbucket.org:username/test.git
githook: Will deploy '' branch to the project '/var/www/test-dev'
是否缺少某些内容或设置不正确?
答案 0 :(得分:2)
我看到很多问题。您将GIT_WORK_TREE
设置为远程URL;它必须是本地目录的路径。 GIT_DIR
必须指向.git
目录或上一级目录。
您在脚本的开始处设置了GIT_WORK_TREE
和GIT_DIR
,因此每个git
命令都使用这些设置运行,即使是那些需要访问原始存储库的命令也是如此。让我尝试用这种方式重写脚本:
DEPLOY_ALLOWED_BRANCH="develop"
while read oldrev newrev refname
do
BRANCH=$(git rev-parse --symbolic --abbrev-ref $refname)
NEWREV="$newrev"
if [ "$DEPLOY_ALLOWED_BRANCH" == "$BRANCH" ]; then
GIT_WORK_TREE="/var/www/test-dev"
GIT_DIR="/var/www/test-dev/.git"
echo "***** GIT_DIR: $GIT_DIR"
echo "***** GIT_WORK_TREE: $GIT_WORK_TREE"
echo "githook: Will deploy branch '${BRANCH}' to the project '${GIT_DIR}'"
git checkout -f "${BRANCH}" || exit 1
git reset --hard "$NEWREV" || exit 1
exit 0
fi
done