Git颜色:如何在“;吉特分行-vv”;?
我的问题不是重复的;我想知道如何将分支状态的Git颜色:如何在“;吉特分行-vv”;?,git,colors,git-config,Git,Colors,Git Config,我的问题不是重复的;我想知道如何将分支状态的部分涂上颜色: user@host:~/devel/repo$ git branch -vv user/feature 3ffcd496f [github/user/feature: gone] Feature complete 在我当前的git版本2.17.1手册页中,我找不到任何关于此功能的参考,所以我猜它还不存在。谷歌搜索也没有发现任何相关信息 我发现当有很多分支时,状态有时会在文本墙中消失。我想让它再突出一点 我可以使用其
部分涂上颜色:
user@host:~/devel/repo$ git branch -vv
user/feature 3ffcd496f [github/user/feature: gone] Feature complete
在我当前的git版本2.17.1
手册页中,我找不到任何关于此功能的参考,所以我猜它还不存在。谷歌搜索也没有发现任何相关信息
我发现当有很多分支时,状态有时会在文本墙中消失。我想让它再突出一点
我可以使用其中一个答案,但考虑到我想要着色的信息对上下文的敏感程度,大多数答案很快就会变得毛茸茸的。例如,colorit似乎无法为匹配的regexp的子集着色,因此不可能仅为上游状态中的gone着色,不幸命名的分支将“随机”着色
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中,用作备用配置
更新2
我修复了颜色重置问题。我确信我已经尝试了%(color:reset)
,但是在阅读了git日志
帮助并看到它有一个颜色重置机制后,我又尝试了一次,它成功了
更新3
使用中的两次传递方法,我得出:
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
,并通过传递来保留分支功能的其余部分。在参数处理方面还有改进的余地,但现在已经足够了。git branch
无法更改单词的颜色
如果您的Git足够新,请检查您安装的文档中每个ref的Git是否支持这些字段和%(如果)
测试,然后每个ref的Git确实可以设置%(上游:轨迹)
输出的颜色。您可以使用它来构建与从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/
我把它分成了几行,以便投递。单行版本可能更适合作为起点,尤其是在不使用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
显示的所有内容