Git颜色合并/变基冲突

14
我想知道是否有人有技巧可以在合并或变基时对冲突的输出进行着色。 我想特别着色显示带有文件名的那一行,例如这里的第二行:
Auto-merging CMakeLists.txt
CONFLICT (content): Merge conflict in CMakeLists.txt
Failed to merge in the changes.
感谢。
编辑:
使用 git 别名和 bash 函数,我可以编写以下内容:
color-merge = "!f() { git merge --no-commit --stat $1| egrep --color 'CONFLICT .*|$'; }; f"

这会着色所有冲突的行,但是:

  • 无法更改传递给合并的选项
  • 在要跟踪的分支上没有完成

所以我正在寻找更强大的东西。

干杯


git config --global color.ui auto ?! - Lazy Badger
我有一个颜色=always,但那并不是我想要的。 - Pluc
3
两年前有人问起,但至今Git仍不支持在冲突(CONFLICT)时显示颜色,这也太疯狂了吧! - user1375096
4个回答

6
另一个选择可能是创建一个git别名。这对我来说更可取,因为它将git特定的自定义内容保持在一起,而不是漂浮在其他不相关的.profile文件中。
将类似以下内容添加到您的~/.gitconfig或本地git项目的.git/config中也应该可以工作:
[alias]
    color-merge = "!f() { git merge $@ | egrep --color 'CONFLICT .*|$' ; }; f"

按以下方式调用:git color-merge branch --option1

请注意,您的shell的GREP_COLOR环境变量将控制所使用的颜色。


如果我错了,请有人纠正我,但这种方法是利用bash中的shellshock漏洞,对吧?或者它只是看起来相似。毕竟它没有使用ENV变量。 - beporter

2

这是一个被新问题引用的旧问题,而且它是我在谷歌搜索结果中看到的第一个问题,所以我认为方便的话可以在五年后更新答案:

只需将unmerged = <颜色>一行添加进你的Git设置文件(~/.gitconfig) 的 [color "status"] 组中,就像这样:

[color "status"]
     unmerged  = yellow

我正在使用 git --version 2.11.0。是的,终于有了支持它的git版本:-)


1
[color]
  branch = auto
  diff = auto
  status = auto

[color "branch"]
  current = yellow reverse
  local = yellow
  remote = green

[color "diff"]
  meta = yellow bold
  frag = magenta bold
  old = red bold
  new = green bold

[color "status"]
  added = yellow
  changed = green
  untracked = cyan

http://jblevins.org/log/git-colors

很抱歉,合并冲突时没有颜色。


谢谢提供链接。确实只用git config是无法实现的,但是通过添加bash命令应该是可以实现的。 - Pluc

1
这是一个Bash函数,可以帮助你达到目的地(除了分支完成)。
   git-merge-color () { git merge  $@ | egrep --color 'CONFLICT .*|$'; }

您可以使用任何“git merge”参数来调用git-merge-color。


我该如何应用/调用它?它对我来说看起来非常有前途,但是当涉及到bash时,我完全是个新手。 - Fredrik Norlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接