如何让Git diff中的old mode/new mode变更显示颜色?
给Git Diff权限变更行添加颜色
最简便的实现:配置Git Pager自动上色
不用写复杂脚本,直接通过Git全局配置让old mode xxx和new mode xxx行自动显示红/绿配色(和代码变更一致):
执行以下命令:
git config --global core.pager 'less -R -F -X | sed -e "s/old mode [0-9]*/\x1b[31m&\x1b[0m/g" -e "s/new mode [0-9]*/\x1b[32m&\x1b[0m/g"'
\x1b[31m对应红色(旧权限行),\x1b[32m对应绿色(新权限行)less -R确保终端能正确解析ANSI颜色代码- 去掉
--global即可只对当前仓库生效
备选方案:自定义Git Diff颜色规则
如果想通过Git自身的颜色体系配置,可创建自定义规则,但本质还是依赖文本替换:
- 新建颜色配置文件
~/.gitdiff_mode_colors:
[diff "mode_colors"] old_mode = red bold new_mode = green bold
- 关联到Git配置:
git config --global diff.mode_colors.command "git diff --no-color | sed -e 's/old mode /\x1b[31m&/g' -e 's/new mode /\x1b[32m&/g'"
不过这种方式比Pager配置繁琐,更推荐第一种。
关于你的Perl后处理脚本
如果需要更灵活的逻辑(比如根据权限值自定义颜色、过滤特定权限变更),用Perl脚本做后处理是很好的选择。你可以把脚本集成到bash函数里,调试完成后分享出来也能帮到其他遇到同样问题的人。
内容的提问来源于stack exchange,提问作者Alex Martian
相关产品推荐
相关产品推荐

