如何将基于行的管道转换为连续流?及PO文件Git版本控制脚本相关技术问询
如何将基于行的管道转换为连续流?及PO文件Git版本控制脚本相关技术问询
嘿,我一直在折腾怎么让.po文件在Git里的版本控制更合理,终于写了个脚本用来配合diff和filter-clean功能,脚本内容如下:
msgcat --no-location --no-wrap --sort-output - | msgattrib --no-obsolete - | grep -Ev '^"POT-Creation-Date|^"PO-Revision-Date|^"Last-Translator|^"X-Generator'
对应的.gitconfig配置项我也整理好了,大家可以直接参考:
[diff "podiff"] textconv = cat "$1" | "$(git rev-parse --show-toplevel)"/podiff cachetextconv = true [filter "pocomments"] clean = "$(git rev-parse --show-toplevel)"/podiff smudge = cat "$1" # NOP; enable the other one temporarily to affect files on checkout, restore, etc., but please do not commit it -Zsar 2024-06-10 # smudge = "$(git rev-parse --show-toplevel)"/podiff required
这个脚本里的每一步都承担着关键作用,我给大家拆解一下:
- 平时代码重构或者无关改动会让.po文件里的源位置信息和条目顺序频繁变化,这会导致Git diff里出现大量无意义的变动。
msgcat --no-location --no-wrap --sort-output -这一步就是解决这个问题——它移除了源位置标记、不自动换行,还把所有翻译条目按顺序排序,这样就能过滤掉这些无关的变动了。 msgattrib --no-obsolete -的作用是清理掉那些已经过时的翻译条目,这些废弃的内容留着只会干扰版本控制的准确性,清理后能让仓库里的.po文件更干净。- 最后的
grep -Ev ...命令是过滤掉那些每次更新都会自动变化的元数据行,比如POT创建日期、PO修订日期、最后翻译者、生成器这些信息,这些内容的变动和翻译本身无关,过滤后Git diff就能只聚焦在真正的翻译内容变化上了。
不过我现在还有个技术疑问想请教大家:怎么把当前这个基于行处理的管道转换成连续流的处理方式呢?这样应该能提升大体积.po文件的处理效率,避免不必要的行缓冲开销。
备注:内容来源于stack exchange,提问作者Zsar
相关产品推荐
相关产品推荐

