仅当所有测试通过时 Git 主存储库更新,怎么办?

标签 git tdd githooks git-bare

我正在尝试在主 git 存储库中创建 git Hook 以进行更新。我想防止破坏任何测试的推送。如何获取更新后项目的裸仓库代码以运行测试?

P.S.:当然可以使用预提交 Hook 而不是更新,在这种情况下 Hook 应该在提交者的 PC 上,但我相信这应该是在服务器上进行验证的一种方式。

最佳答案

CI 服务器可以为您做这件事,但一个简单的脚本也可以做到这一点。 David Gageot 不久前在他的博客上介绍了一个非常简单的使用 git 进行私有(private)构建的解决方案(这个想法是在推送到远程服务器之前在辅助本地 repo 上进行测试构建):

http://blog.javabien.net/tag/git/page/2/

不幸的是,它是用法语编写的,但您仍然可以查看用于执行此操作的脚本:

#!/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

为非 java 用户编辑

在上面的脚本中,将 mvn clean install 替换为允许您构建项目的命令行(并删除测试 maven pom.xml 文件是否存在的 if 语句)。

关于仅当所有测试通过时 Git 主存储库更新,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867427/

相关文章:

git - bitbucket docker 权限被拒绝(公钥)。致命的 : Could not read from remote repository

git - 如何恢复已删除的文件

unit-testing - 您如何使用遗留代码实现测试驱动开发?

node.js - 如何在 "npm install"上安装 git Hook ?

java - 如何验证 Java 的 git 提交消息?

git - 如何在不相关的分支上重新应用提交?

python - git-diff 如何生成大块描述?

git - 如果特定文件发生更改,我如何自动收到警告?

java - 我应该使用生产代码中的 DAO 来设置和验证测试吗?

wpf - IdeaBlade有哪些局限性?