python hooks_[Python] Git Client Hooks踩坑

本文介绍了在Git Hooks中处理Unity工程文件管理的实践,包括确保meta文件同步、解决Git core.quotepath对中文路径的转义问题,以及在SmartGit中处理中文乱码的解决方案。通过Git命令获取提交变更文件列表,并详细阐述了对字符串进行二次转义的步骤。此外,还分享了解决Python控制台中文输出乱码的方法。
摘要由CSDN通过智能技术生成

1、功能

提交入库前,检查Unity工程目录下的新增、删除操作必须带着meta文件。

为了快速测试,首先用了Client Hooks,这一试还发现了少麻烦,个人感觉Hooks这事还是SVN提供的支持好用。

2、坑&实现&解决

2.1 获取提交的变更文件列表

Git提交划分了多个阶段(工作区、暂存区、本地仓库),怎么拿到对的变更集成为了第一个问题。提交的检查理论上是暂存区跟本地仓库的差异,可用的命令如下:

shell> git diff-index --cached --name-status HEAD

shell> git diff --staged --name-status

拿到变更文件列表后,又遇到新问题

新增=>新建文本文档.txt

Git有个core.quotepath的设置,值为true会对中文路径进行转义。该情况下,做检查跟报错提示要处理两个点:

去掉两端的引号

逆向转义,还原路径名

命令行直接返回的内容,类似是一个RawString的结果,逆转义要走两步处理:

# 对RawString的内容进行二次转义

escape_txt = eval('%s' % txt)

# 得到正常String的内容,再处理quote的转义

rst = escape_txt.encode(encoding='raw_unicode_escape').decode()

这些操作度娘也没有介绍,是一通乱猜撞出来的方案。

2.2 GUI工具里中文输出乱码

我用的是SmartGit,通过print输出错误信息时,中文全是乱码。原因大概是控制台的编码格式,跟Python代码的编码不一致。很多文章都乱写,在代码里各种encode、decode,或者文件头加coding注释,下面这篇终于给出了正解!!!

# 修改标准输出流编码,保证中文正常显示

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')

3、小结

这次Git Hooks的实现,解决了3个小的日常问题:

Python在IDE的控制台里,中文输出乱码:TextIOWrapper

如何对str进行二次转义:eval

如何获得str中的bytes(不是str转换为bytes): encode(encoding='raw_unicode_escape')

str二次转义

获得str中的bytes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值