关于“无服务器CI与git”bash脚本的询问

时间:2014-04-06 15:46:24

标签: git bash git-merge git-commit git-remote

我参考了 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命令?作为预提交钩?
  • 如果在单元测试运行时对初始git存储库进行了更改会发生什么?

1 个答案:

答案 0 :(得分:1)

脚本有点过时但是它的工作方式如下:您可以使用脚本来推送本地更改或提交并推送本地更改。后一种行为我在新版本的脚本中摆脱了,因为它应该只有一个责任。在运行构建之前,它将从远程拉出,克隆整个存储库,从此克隆运行构建然后推送。如果在此期间由其他人推送更改,则推送将完全失败。如果您在此期间对您的仓库进行更改,则克隆将不知道这些更改。

以下是我现在每天使用的版本https://github.com/dgageot/dotfiles/blob/master/bin/git-build

希望这有帮助。