Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git颜色:如何在“;吉特分行-vv”;?_Git_Colors_Git Config - Fatal编程技术网

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
显示的所有内容