如何对速记git状态的输出进行排序?

时间:2014-03-03 21:47:50

标签: git

我想对git status --short --branch的输出进行排序,以便:

  • 索引中的文件显示在底部
  • 在工作树中修改但未在索引中修改的文件显示在
  • 上方
  • 顶部的未跟踪更改

如果这需要管道连接到其他命令来对输出中的行进行排序,那么保留由Git配置的输出着色会很好。

我能创建一些聪明的别名吗?注意我在Windows上使用Git(如果重要的话)。

2 个答案:

答案 0 :(得分:1)

您可以告诉git生成颜色代码,但要按自定义顺序排序,您必须编写一些脚本。这是一个简短的python示例,您可以从git -c color.ui=always status --short --branch

进行管道传输
#!/bin/env python

import sys, re

# custom sorting order defined here:
order = { 'A ' : 1, ' M' : 3, '??' : 2, '##' : 0 }

ansi_re = re.compile(r'\x1b[^m]*m')

print ''.join(sorted(
    sys.stdin.readlines(),
    cmp=lambda x,y: cmp(
        order.get(ansi_re.sub('', x)[0:2],0),
        order.get(ansi_re.sub('', y)[0:2],0))))

<子> 或者是一个单行的憎恶:

git -c color.ui=always status --short --branch | python -c 'import sys, re; \
  order = {"A ":1," M":3,"??":2,"##":0}; ansi_re = re.compile(r"\x1b[^m]*m");\
  print "".join(sorted(sys.stdin.readlines(),cmp=lambda x,y: \
  cmp(order.get(ansi_re.sub("", x)[0:2],0), order.get(ansi_re.sub("", y)[0:2],0))))'

简短说明。

python脚本读取 stdin ,这是git status的彩色列表输出,在剥离ANSI颜色代码后,比较每个状态的自定义优先级的前两个状态字符在字典中定义。

ANSI颜色代码删除基于:How can I remove the ANSI escape sequences from a string in python

可以在git status帮助页面找到不同状态代码的完整列表。

答案 1 :(得分:0)

tail -r可用于反转git status的输出,但不会保留颜色,显然on Linux there is no -r option, so you have to use tac instead

git status --short --branch | tail -r

我还有其他相关的反向技巧,因此可能值得查看其他选项(以获取颜色输出)。