我们正在测试我们网站的git版本控制。当前设置在网络共享驱动器/ g /上有两个裸存储库(一个用于内部网,一个用于Internet)。推送到此存储库时,我希望将该站点自动检出到/ x /的Web服务器。根据这里的几个博客和问题的建议,我设置了一个post-receive钩子如下:
#!/bin/sh
GIT_WORK_TREE=/x/intranet checkout -f
这适用于部署每个存储库的主分支。每次部署可能需要5-10秒。但是,我们还希望有一个dev分支,它会自动检出/ dev / dev服务器。我修改过的钩子看起来像这样:
#!/bin/sh
GIT_WORK_TREE=/x/intranet checkout -f master
GIT_WORK_TREE=/y/intranet checkout -f dev
这是非常有问题的,因为现在推动大约需要15分钟。问题似乎是每个分支的整个工作目录都被重写,而不是只更新任何已更改的文件。即使在添加一个条件来检查已经推动了哪个分支并且只检查了该分支之后,如果我推动分支而不是之前推动的分支,那么推送仍然需要大约10分钟。显然这是不可接受的。
我目前的尝试在每台服务器上有2个存储库(一个内部网和一个Internet)。我现在运行的钩子如下所示:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
cd /x/intranet
unset GIT_DIR
git pull --verbose origin master
echo "Changes pushed to production server."
fi
if [ "dev" == "$branch" ]; then
cd /y/intranet
unset GIT_DIR
git pull --verbose origin dev
echo "Changes pushed to dev server."
fi
done
这个钩子仍然花费的时间比我觉得它应该运行的时间长(差不多2分钟,相比之下,我自己在其中一个仓库拉动了大约4秒钟)。我的任何一个实现都有问题吗?或者是否有其他方法可以解决问题?
编辑:我想知道在git bash shell中使用已安装的驱动器是否可能成为问题?