我们有一个过程来限制一个代码检查/提交的大小,并且希望内置工具来检查和阻止所有超过限制的提交。 基于git / gerrit插件和google搜索,没有看到任何针对此类限制的现有解决方案。是否有任何实践或建议来建立对git / gerrit的限制。
非常感谢。
答案 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钩子,但它在本地运行。此外,我不在示例中考虑二进制文件。它们的删除和插入不能反映实际的增量大小。