我的问题不是this question的重复;我想知道如何为分支状态的gone
部分上色:
user@host:~/devel/repo$ git branch -vv
user/feature 3ffcd496f [github/user/feature: gone] Feature complete
在我当前的git version 2.17.1
手册页中找不到对该功能的任何引用,因此我猜想它尚不存在。谷歌搜索也没有发现任何相关内容。
我发现,当分支很多时,状态有时会在文本墙上消失。我希望它能脱颖而出。
我可以使用this question的答案之一,但是考虑到我要着色的信息对上下文的敏感程度,这些答案中的大多数答案将很快变得多毛。例如,colorit似乎无法为匹配的正则表达式的子集着色,因此无法为上游状态中的着色着色,并且不幸命名的分支将获得“随机”着色。
git是上下文的来源,因此是进行着色的自然选择。
基于@torek的回答,我接近复制git branch -vv
输出:
git for-each-ref --format='%(HEAD) %(if)%(HEAD)%(then)%(color:green)%(end)%(align:left,53)%(refname:short)%(end)%(color:reset)%(objectname:short) %(if)%(upstream)%(then)[%(color:blue)%(upstream:short)%(color:reset)%(if)%(upstream:track,nobracket)%(then): %(color:red)%(upstream:track,nobracket)%(color:reset)%(end)] %(end)%(subject)' refs/heads/
但这并不完美:
%(align:left,53)
; 53对我当前的分支集恰好是正确的。我已将此添加到我的gitconfig中以用作备用。
我解决了颜色重置问题。我确定我曾经尝试过%(color:reset)
,但是在阅读了git log
帮助后,看到它具有颜色重置机制,我再次尝试了一下,它就起作用了。
使用this answer中的两次通过方法,我到达了:
br = "!f() { \
if [ -z \"$1\" ] || [ \"$1\" = \"-v\" ] || [ \"$1\" = \"-vv\" ]; then \
width=$(git for-each-ref --format='%(refname:short)' refs/heads | wc -L); \
if [ \"$1\" = \"-v\" ]; then \
git for-each-ref --format=\"%(HEAD) %(if)%(HEAD)%(then)%(color:green)%(end)%(align:left,$width)%(refname:short)%(end)%(color:reset) %(objectname:short) %(if)%(upstream:track,nobracket)%(then)[%(color:red)%(upstream:track,nobracket)%(color:reset)]%(end) %(subject)\" refs/heads/; \
else \
git for-each-ref --format=\"%(HEAD) %(if)%(HEAD)%(then)%(color:green)%(end)%(align:left,$width)%(refname:short)%(end)%(color:reset) %(objectname:short) %(if)%(upstream)%(then)[%(color:blue)%(upstream:short)%(color:reset)%(if)%(upstream:track,nobracket)%(then): %(color:red)%(upstream:track,nobracket)%(color:reset)%(end)] %(end)%(subject)\" refs/heads/; \
fi; \
else \
git branch \"$@\"; \
fi; \
}; f"
这将计算所需的对齐宽度,在-v
或-vv
情况下为跟踪信息着色,将默认的无参数形式改为-vv
,并保留其余的通过传递功能。在参数处理方面仍有改进的余地,但这已经足够了。
答案 0 :(得分:2)
git branch
此处无法更改单词gone
的颜色。
如果您的Git足够新,请查看已安装的git for-each-ref
文档,看看它是否支持这些字段和%(if)
测试,然后git for-each-ref
确实一种设置%(upstream:track)
输出颜色的方法。您可以使用它来构建与git branch -vv
相同的输出,除了具有所需的颜色支持之外。
这是一个简单的例子:
git for-each-ref \
--format='%(refname:short) '\
'%(if:equals=gone)%(upstream:track,nobracket)%(then)'\
'%(color:red)%(end)%(upstream:track)%(color:black)' \
refs/heads/
我将其分解成几行用于StackOverflow发布。单行版本可能更适合作为起点,尤其是在您不使用sh / bash的情况下:
git for-each-ref --format='%(refname:short) %(if:equals=gone)%(upstream:track,nobracket)%(then)%(color:red)%(end)%(upstream:track)%(color:black)' refs/heads/
请注意,您将需要扩展%
指令集以显示所有git branch -v
所显示的内容。