【问题标题】:How to invoke utility omeld (oitnb) from git如何从 git 调用实用程序 omeld (oitnb)
【发布时间】:2026-02-16 21:40:01
【问题描述】:
oitnb (https://pypi.org/project/oitnb/) 看起来像是 yapf 和 black 好的部分的组合。作者声称它解决了使用名为 omeld 的实用程序将旧修订(格式化之前)与格式化后提交的修订进行比较的问题。集成该实用程序的示例是针对 mercurial,我们使用的是 git。
我已尝试向
注册 omeld 实用程序
get config --global diff.tool /usr/local/bin/omeld
但确实让事情顺利进行,git 一直告诉它不知道 omeld。
关于如何解决这个问题的任何想法?
【问题讨论】:
标签:
python
git
code-formatting
oitnb
【解决方案1】:
您可以尝试使用下面显示的别名,但在这样做之前您应该升级到 oitnb>0.1.3 或使用以下替代 omeld.py:
import sys
import os
def main():
# print('omeld:', os.getcwd(), sys.argv[1:])
assert len(sys.argv) == 3, 'omeld: expecting two arguments'
runs = 0
for idx, arg in enumerate(sys.argv[1:]):
assert os.path.exists(sys.argv[1]), f'omeld: parameter {idx}, cannot find "{arg}"'
rp = os.path.realpath(arg)
# check if you are on a temporary directory, so there is less chance to screw up
if rp.startswith('/tmp/') or rp.startswith('/var/tmp/'):
runs += 1
os.system('oitnb -q ' + rp)
if runs > 0:
os.system('meld ' + ' '.join(sys.argv[1:]))
else:
print('could not run oitnb on "{}" or "{}"'.format(*sys.argv[1:]))
if __name__ == '__main__':
main()
因为与oitnb=0.1.3 一起分发的版本如果将旧版本与当前状态进行比较,可以格式化源目录中的文件。在git 中,这似乎更频繁地发生(它似乎优化为不创建临时文件,即使例如,如果文件的当前版本自第二次修订以来没有更改)。
别名:
alias gomeld='git difftool --extcmd=/path/to/omeld -y'
我已经考虑过更改配置,但也没有让它起作用。