2012-03-13 28 views
11

Me preguntaba si alguien tenía un truco para colorear la salida de una fusión o rebase cuando hay un conflicto. Quiero colorear especialmente la línea con el nombre del archivo, por ejemplo, la segunda línea aquí:Git color merge/rebase conflicts

Auto-merging CMakeLists.txt 
CONFLICT (content): Merge conflict in CMakeLists.txt 
Failed to merge in the changes. 

Gracias

EDIT:

El uso de alias de Git y una función de bash puedo escribir esto:

color-merge = "!f() { git merge --no-commit --stat $1| egrep --color 'CONFLICT .*|$'; }; f" 

Esta aportan color a todas las líneas de conflicto, sino:

  • Es imposible cambiar las opciones pasadas al fusionar
  • No hay ninguna conclusión sobre la rama para ser rastreados

Así que estoy buscando algo más potente.

Saludos

+0

'git config --global color.ui auto'?! –

+0

Tengo color = siempre pero eso no hace lo que quiero. – Pluc

+2

¡Es una locura que git todavía no admita el color en CONFLICT después de dos años de esta pregunta! – huocp

Respuesta

0
[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 

Así que no hay colores para un conflicto de combinación me temo.

+0

Gracias por el enlace. De hecho, eso no se puede lograr con solo git config, pero debe ser posible agregando comandos bash. – Pluc

1

Aquí es una función bash que te lleva allí (excepto para la terminación de rama):

git-merge-color() { git merge [email protected] | egrep --color 'CONFLICT .*|$'; } 

Puede invocar git de combinación de colores con los argumentos 'git merge' que por favor.

+0

¿Cómo podría aplicar/invocar esto? Me parece realmente prometedor, pero soy un completo novato cuando se trata de bash. –

4

Otra opción podría ser crear un git alias. Esto es preferible para mí porque mantiene juntas las personalizaciones específicas de git en lugar de estar flotando en otro lugar en un archivo .profile no relacionado en alguna parte.

Añadiendo algo como esto a su ~/.gitconfig o del proyecto Git local de .git/config también debería funcionar:

[alias] 
    color-merge = "!f() { git merge [email protected] | egrep --color 'CONFLICT .*|$' ; }; f" 

invocarlo así: git color-merge branch --option1

Tenga en cuenta que de su cáscara GREP_COLOR environment variable controlará el color utilizado.

+0

Alguien me corrige si me equivoco, pero este enfoque se aprovecha de la vulnerabilidad [shellshock] (http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271) en Bash, ¿verdad? O tal vez solo se ve similar. No está usando una ENV var después de todo. – beporter

1

Ésta es una vieja pregunta que se hace referencia de preguntas nuevas, y es el primero que aparece en mis resultados de búsqueda de Google, por lo que creo que es conveniente para publicar la respuesta actualizada 5 años más tarde:

Simplemente añada la línea unmerged = <color> en [color "status"] grupo en el archivo de configuración del GIT (~/.gitconfig), así:

[color "status"] 
    unmerged = yellow 

estoy usando git --version2.11.0. Así que sí, finalmente git lo apoyó :-)