【发布时间】:2019-01-08 00:22:47
【问题描述】:
我的问题不是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 以用作备用。
更新 2
我修复了颜色重置问题。我确定我尝试过%(color:reset),但在阅读了git log 帮助并看到它具有颜色重置机制后,我再次尝试并成功了。
更新 3
使用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,并通过传递它来保留其余的分支功能.参数处理还有改进的余地,但现在已经足够了。
【问题讨论】:
标签: git colors git-config