我参考了 David Gageot : Serverless CI with git 的优秀文章。
让我在这里加入大卫的剧本:
#!/bin/bash
if [ 0 -eq `git remote -v | grep -c push` ]; then
REMOTE_REPO=`git remote -v | sed 's/origin//'`
else
REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'`
fi
if [ ! -z "$1" ]; then
git add .
git commit -a -m "$1"
fi
git pull
if [ ! -d ".privatebuild" ]; then
git clone . .privatebuild
fi
cd .privatebuild
git clean -df
git pull
if [ -e "pom.xml" ]; then
mvn clean install
if [ $? -eq 0 ]; then
echo "Publishing to: $REMOTE_REPO"
git push $REMOTE_REPO master
else
echo "Unable to build"
exit $?
fi
fi
如果我正确理解了这个脚本,它会将初始git存储库克隆到第二个隐藏的git存储库,在那里运行单元测试。
如果单元测试通过,则第二个隐藏存储库将被推送到初始工作存储库。
我的问题如下:
git commit
命令?作为预提交钩?答案 0 :(得分:1)
脚本有点过时但是它的工作方式如下:您可以使用脚本来推送本地更改或提交并推送本地更改。后一种行为我在新版本的脚本中摆脱了,因为它应该只有一个责任。在运行构建之前,它将从远程拉出,克隆整个存储库,从此克隆运行构建然后推送。如果在此期间由其他人推送更改,则推送将完全失败。如果您在此期间对您的仓库进行更改,则克隆将不知道这些更改。
以下是我现在每天使用的版本https://github.com/dgageot/dotfiles/blob/master/bin/git-build
希望这有帮助。