Wal*_*t W 5 git website-deployment git-post-receive web
我正在使用Git来管理我的网站的源代码和部署,目前在同一个盒子上运行测试和实时网站.最初在这个资源http://toroid.org/ams/git-website-howto之后,我想出了以下post-receive钩子脚本来区分推送到我的实时站点并推送到我的测试站点:
while read ref
do
#echo "Ref updated:"
#echo $ref -- would print something like example at top of file
result=`echo $ref | gawk -F' ' '{ print $3 }'`
if [ $result != "" ]; then
echo "Branch found: "
echo $result
case $result in
refs/heads/master )
git --work-tree=c:/temp/BLAH checkout -f master
echo "Updated master"
;;
refs/heads/testbranch )
git --work-tree=c:/temp/BLAH2 checkout -f testbranch
echo "Updated testbranch"
;;
* )
echo "No update known for $result"
;;
esac
fi
done
echo "Post-receive updates complete"
Run Code Online (Sandbox Code Playgroud)
但是,我怀疑这实际上是安全的:)我绝不是Git专家,但我猜测Git可能跟踪当前检出的分支头,这种方法可能有可能混淆它永无止境.
所以有几个问题:
这样安全吗?
更好的方法是将我的基础存储库作为测试站点存储库(具有相应的工作目录),然后将该存储库推送更改为新的实时站点存储库,该存储库具有到实际站点库的相应工作目录?这也允许我将生产移动到不同的服务器并保持部署链完好无损.
有什么我想念的吗?在使用Git管理网站时,是否有不同的,简洁的方法来区分测试和生产部署?
根据Vi的回答,作为一个额外的说明,是否有一个很好的方法可以处理删除而不会破坏文件系统?
谢谢,-Walt
PS - 我为多个回购提出的脚本(除非我听到更好,否则我正在使用)如下:
sitename=`basename \`pwd\``
while read ref
do
#echo "Ref updated:"
#echo $ref -- would print something like example at top of file
result=`echo $ref | gawk -F' ' '{ print $3 }'`
if [ $result != "" ]; then
echo "Branch found: "
echo $result
case $result in
refs/heads/master )
git checkout -q -f master
if [ $? -eq 0 ]; then
echo "Test Site checked out properly"
else
echo "Failed to checkout test site!"
fi
;;
refs/heads/live-site )
git push -q ../Live/$sitename live-site:master
if [ $? -eq 0 ]; then
echo "Live Site received updates properly"
else
echo "Failed to push updates to Live Site"
fi
;;
* )
echo "No update known for $result"
;;
esac
fi
done
echo "Post-receive updates complete"
Run Code Online (Sandbox Code Playgroud)
然后在../Live/$sitename中的repo(这些是在init之后添加工作树的"裸"repos)具有基本的post-receive:
git checkout -f
if [ $? -eq 0 ]; then
echo "Live site `basename \`pwd\`` checked out successfully"
else
echo "Live site failed to checkout"
fi
Run Code Online (Sandbox Code Playgroud)
更好的方法是让我的基础存储库成为测试站点存储库(具有相应的工作目录),然后让该存储库将更改推送到新的实时站点存储库,该存储库具有与实时站点基础相对应的工作目录?这还允许我将生产移动到不同的服务器并保持部署链完整。
当然是。在极少数情况下,您希望将测试站点托管在生产站点旁边。几乎在每个方面这都是危险和不专业的,更不用说数据库损坏、网络服务器锁定等。
我通常会设置一个虚拟机用于测试目的。效果很好,我可以在旅行时将它放在笔记本电脑上。
使用 git 部署您的网站是一个非常好的主意,还有很多其他人这样做(例如 Rob Conery)。如果您碰巧有一个实时站点和测试站点,那么您应该在存储库中为它们设置单独的分支,并在相应的服务器存储库上设置为远程跟踪分支。您的工作流程变得就像在测试分支中工作一样简单,将其推送到测试,测试它,合并到上线并推送上线。
老实说,不要让自己太难受。
| 归档时间: |
|
| 查看次数: |
2400 次 |
| 最近记录: |