美文网首页
[Python] Git Client Hooks踩坑

[Python] Git Client Hooks踩坑

作者: _Walker__ | 来源:发表于2020-10-16 13:05 被阅读0次

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注释,下面这篇终于给出了正解!!!

Python项目,VS Code控制台输出乱码问题解决办法
# 修改标准输出流编码,保证中文正常显示
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')

3、小结

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

  1. Python在IDE的控制台里,中文输出乱码:TextIOWrapper
  2. 如何对str进行二次转义:eval
  3. 如何获得str中的bytes(不是str转换为bytes): encode(encoding='raw_unicode_escape')
str二次转义 获得str中的bytes

相关文章

网友评论

      本文标题:[Python] Git Client Hooks踩坑

      本文链接:https://www.haomeiwen.com/subject/xetzpktx.html