我们的 Git 工作流程的基本设置是本地网络服务器上的一个裸存储库,两个开发人员推/拉到它。
我们希望自动复制(签出)每个被推送到本地网络服务器上不同位置的分支。举例说明:
将“开发”分支副本推送到“开发”子文件夹。将“master”分支副本推送到“master”子文件夹。
我们遇到的问题是让 post-receive 挂钩来执行此操作。这是我们目前拥有的:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
GIT_WORK_TREE=/master
git checkout -f $branch
echo 'Changes pushed master.'
fi
if [ "develop" == "$branch" ]; then
GIT_WORK_TREE=/develop
git checkout -f $branch
echo 'Changes pushed to develop.'
fi
done
收到的错误是:
“远程:致命:此操作必须在远程工作树中运行:更改推送到开发。”
正如您对该错误所期望的那样 - 实际上没有检查任何内容。
我也尝试过以这种方式接收后,但同样的问题:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/master checkout -f $branch
echo 'Changes pushed master.'
fi
if [ "develop" == "$branch" ]; then
git --work-tree=/develop checkout -f $branch
echo 'Changes pushed to develop.'
fi
done
任何人都可以在这里解释我做错了什么(随时像对 3 岁的孩子一样解释它:))。谢谢。
为了让未来的读者更清楚答案,托雷克一针见血。我曾经--work-tree=/master
尝试进入我的裸仓库根目录中的一个名为“master”的文件夹(例如,在“分支”、“钩子”等旁边)。一旦我将其更改为--work-tree=./master
(注意正斜杠前的点),一切都按我的预期工作。