有什么好办法来限制一次代码更改大小git / gerrit

时间:2018-08-21 03:13:05

标签: git continuous-integration gerrit

我们有一个过程来限制一个代码检查/提交的大小,并且希望内置工具来检查和阻止所有超过限制的提交。 基于git / gerrit插件和google搜索,没有看到任何针对此类限制的现有解决方案。是否有任何实践或建议来建立对git / gerrit的限制。

非常感谢。

1 个答案:

答案 0 :(得分:3)

Gerrit有这样的option

可以由receive.maxObjectSizeLimit进行全局配置。

对于特定项目,您可以在项目的Maximum Git object size limit:页上找到General

更新:

如果要检查Gerrit中已更改的行数,建议您使用Gerrit钩ref-update。它的工作有点像Git钩子update。挂钩通过--oldrev <sha1> --newrev <sha1>接收旧提交和新提交。在不同版本的Gerrit中,参数列表可能会有所不同。有关详细信息,请参阅Gerrit的文档。如果钩子以非零值退出,则推送将被拒绝。

示例代码:

#!/bin/bash

z40=0000000000000000000000000000000000000000

while test $# != 0
do
  case $1 in
  --oldrev)
      shift
      oldrev=$1
  ;;
  --newrev)
      shift
      newrev=$1
  ;;
  esac
  shift
done

if [[ "${newrev}" = ${z40} ]];then
    # Handle delete
    # Do something here

else
    if [[ "${oldrev}" = ${z40} ]];then
        # New branch
        # Do something here

    else
        # Update existing branch, check new commits
        newcommits=$(git log --pretty=%H ${oldrev}..${newrev})
        for commit in ${newcommits};do
            shortstat=$(git show ${commit} --pretty="" --shortstat)
            # Parse shortstat to get the numbers of deletions and insertions
            # if the number is big enough, print error message and exit with a non-zero value, 
            # so that git-push will be rejected

        done
    fi
fi
exit 0

如果要在本地存储库中检查它,建议使用Git钩子pre-commit

示例代码:

#!/bin/bash

shortstat=$(git diff --cached --shortstat)
# parse shortstat to get the numbers of deletions and insertions
# if the number is big enough, print error message and exit with a non-zero value, 
# so that git-commit will fail

Gerrit钩子更可靠,因为它总是由要检查的每个新提交调用,但是它可能会影响Gerrit服务的性能。可能有意或无意地绕过了Git钩子,但它在本地运行。此外,我不在示例中考虑二进制文件。它们的删除和插入不能反映实际的增量大小。