本文目录导读:

Git钩子脚本可以通过多种方式检查文档完整性,以下是几种常见的方法:
结构完整性检查(JSON/YAML/Markdown)
JSON文件检查
#!/bin/bash
# .git/hooks/pre-commit
# 检查所有修改的JSON文件
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.json$'); do
if [ -f "$file" ]; then
python3 -c "import json; json.load(open('$file'))" 2>/dev/null
if [ $? -ne 0 ]; then
echo "❌ 无效的JSON文件: $file"
exit 1
fi
fi
done
YAML文件检查
# 需要安装 yamllint
for file in $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(yaml|yml)$'); do
if [ -f "$file" ]; then
yamllint "$file" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "❌ YAML语法错误: $file"
exit 1
fi
fi
done
Markdown链接检查
# 使用markdown-link-check工具
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.md$'); do
if [ -f "$file" ]; then
markdown-link-check "$file" --quiet
if [ $? -ne 0 ]; then
echo "❌ Markdown中存在失效链接: $file"
exit 1
fi
fi
done
文档模板完整性检查
#!/bin/bash
# 检查文档是否包含必需的部分
REQUIRED_SECTIONS=(
"## 概述"
"## 使用方法"
"## 参数说明"
)
for file in $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(md|txt)$'); do
if [ -f "$file" ]; then
for section in "${REQUIRED_SECTIONS[@]}"; do
if ! grep -q "$section" "$file"; then
echo "❌ $file 缺少 $section 部分"
exit 1
fi
done
fi
done
文档版本一致性检查
#!/bin/bash
# 检查文档中的版本号是否与代码版本一致
VERSION_FILE="VERSION"
DOC_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(md|rst|txt)$')
if [ -f "$VERSION_FILE" ]; then
VERSION=$(cat "$VERSION_FILE")
for file in $DOC_FILES; do
# 检查文档中是否包含正确的版本号
if grep -q "version" "$file" 2>/dev/null; then
if ! grep -q "$VERSION" "$file"; then
echo "⚠️ 警告: $file 可能包含过时版本号"
# 或者 exit 1 如果严格要求版本一致
fi
fi
done
fi
XML/SGML格式检查
#!/bin/bash
# 检查XML文档格式
for file in $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(xml|sgml)$'); do
if [ -f "$file" ]; then
# 使用xmllint检查
xmllint --noout "$file" 2>/dev/null
if [ $? -ne 0 ]; then
echo "❌ 无效的XML格式: $file"
exit 1
fi
fi
done
完整的pre-commit钩子示例
创建 .git/hooks/pre-commit 文件:
#!/bin/bash
echo "🔍 开始文档完整性检查..."
FAILED=0
# 1. 检查语法格式
check_syntax() {
local ext=$1
local files=$(git diff --cached --name-only --diff-filter=ACM | grep "\\.$ext$")
for file in $files; do
case $ext in
json)
python3 -m json.tool "$file" > /dev/null 2>&1 || return 1
;;
yaml|yml)
python3 -c "import yaml; yaml.safe_load(open('$file'))" > /dev/null 2>&1 || return 1
;;
xml)
xmllint --noout "$file" > /dev/null 2>&1 || return 1
;;
esac
done
return 0
}
# 2. 检查Markdown质量
check_markdown() {
local files=$(git diff --cached --name-only --diff-filter=ACM | grep "\\.md$")
for file in $files; do
# 检查空标题
if grep -q "^#\+ $" "$file"; then
echo "❌ $file 包含空标题"
return 1
fi
# 检查连续空行超过2行
if grep -q "^$" "$file" | uniq | wc -l | awk '{if($1>2) exit 1}'; then
echo "⚠️ $file 包含过多空行"
fi
done
return 0
}
# 3. 检查文档长度
check_length() {
local max_lines=500
local files=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(md|txt)$')
for file in $files; do
local lines=$(wc -l < "$file")
if [ "$lines" -gt "$max_lines" ]; then
echo "⚠️ 警告: $file 文档过长 ($lines 行)"
fi
done
}
# 执行检查
check_syntax "json" || FAILED=1
check_syntax "yaml" || FAILED=1
check_syntax "xml" || FAILED=1
check_markdown || FAILED=1
check_length
# 结果
if [ $FAILED -eq 1 ]; then
echo "❌ 文档完整性检查失败"
exit 1
else
echo "✅ 文档完整性检查通过"
fi
安装建议
# 确保钩子脚本可执行 chmod +x .git/hooks/pre-commit # 或者使用 Git 模板自动复制 git config --global init.templatedir '~/.git-templates' mkdir -p ~/.git-templates/hooks cp pre-commit ~/.git-templates/hooks/
这些钩子脚本可以根据项目需求组合使用,建议从基础语法检查开始,逐步增加更复杂的完整性和一致性检查。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播