如何通过Git Diff检测JSON的description字段变更并判断是否为唯一变更?
解决方案
核心思路
利用jq工具移除JSON文件中的description字段(无论它是字符串还是嵌套对象),对比移除前后的文件内容是否一致,以此判断是否存在非description字段的变更。
实现脚本
#!/bin/bash # 获取所有变更的JSON文件 CHANGED_JSON_FILES=$(git diff --name-only origin/main -- '*.json') # 无JSON文件变更时直接返回0,允许流水线继续 if [ -z "$CHANGED_JSON_FILES" ]; then exit 0 fi # 标记是否存在非description字段的变更 HAS_OTHER_CHANGES=0 for FILE in $CHANGED_JSON_FILES; do # 提取当前版本文件移除description后的内容 CURRENT_CONTENT=$(jq 'del(.description)' "$FILE") # 提取origin/main分支对应文件移除description后的内容 ORIGIN_CONTENT=$(git show origin/main:"$FILE" | jq 'del(.description)') # 对比内容是否一致 if [ "$CURRENT_CONTENT" != "$ORIGIN_CONTENT" ]; then echo "⚠️ 文件 $FILE 存在非description字段的变更" HAS_OTHER_CHANGES=1 fi done # 根据检查结果返回状态码 if [ $HAS_OTHER_CHANGES -eq 1 ]; then exit 1 else exit 0 fi
关键说明
- 依赖工具:确保环境中安装了
jq(Azure DevOps流水线可通过任务安装:Ubuntu用apt-get install -y jq,Windows用choco install jq) - 字段处理:
jq 'del(.description)'会删除顶层的description字段,无论其值是字符串还是嵌套多语言对象,都能准确移除 - 变更范围:仅针对变更的JSON文件进行检查,未变更的文件不会被处理,提升效率
- 格式校验:若JSON文件存在格式错误,
jq会抛出异常,需确保所有JSON文件格式合法
内容的提问来源于stack exchange,提问作者user674989
相关产品推荐
相关产品推荐

