我正在使用 Gitosis (Debian Lenny) 开发一个 Web 应用程序,我希望它能够推送到不同的远程存储库/位置,从而允许应用程序的“前沿”、“发布候选”和“生产”版本镜像物理 Web 目录和代码库。我希望每个目录都有应用程序的一个分支。所以一个存储库,三个“实时”版本。
我是 Git 新手,所以可能有更好的解决方案,但到目前为止我想出的方法是找到一种将钩子附加到分支的方法(我还没有找到),或者编写一个钩子来过滤哪个分支正在提交。
我的问题是如何设置一个更新后挂钩来检查提交的分支,为基于该分支的目录设置一个变量,然后将代码库复制到可以通过 HTTP 立即访问的目录中?
git rev-list --branches --pretty=oneline --max-count=1
将返回类似:
cc5112ba59bc82f2e847ac264317c062ce80f69f test commit
但我需要分支本身的名称,如“实验”或“大师”。
所以基本上我正在寻找类似的东西:
1) 获取刚刚提交的分支的名称(例如“master”、“experimental”)到一个字符串中
2) 使用 Bash case 声明使用什么目录
3) 运行类似“git archive --format=tar HEAD | (cd $LOCATION && tar xf -)”的内容,其中位置是从案例返回的内容。
我以为我正在接近以下内容,但意识到它没有返回分支名称,而是返回提交消息:
#!/bin/sh
# Get substr from "sha1[space]commit-msg"
BRANCH=$(git rev-list --pretty=oneline --branches --max-count=1 | awk '{split($0,array," ")} END{print array[2]}')
case $BRANCH in
"experimental")
dir="/home/APP_NAME/experimental"
;;
"master")
dir="/home/APP_NAME/production"
;;
esac
# move to location and copy files
git archive --format=tar HEAD | (cd $loc && tar xf -)
我确实意识到,如果我总是将分支作为提交的第一部分,我可以完成这样的事情,但我真的不想担心它。
任何帮助,将不胜感激。提前致谢!