Раскраска выхода команды git diff

Последнее время подсел на Git. Работаю в консоли. Но никак не мог привыкнуть к выходу команды git diff. Как-то трудно взгляд продирается через все эти строчки с закорючками в стандарте diff .

Решение на базе самописного скрипта

А ведь давно уже все привыкли работать с подсвеченным синтаксисом. К хорошему ведь быстро привыкаешь. После небольшого исследования оказалось, что раскрасить выход git diff как говорится не просто, а очень просто

Описываемое решение работает естественно на Linux/Bash (моя система на сегодня Ubuntu 11.04)

Итак исходные условия:

  • Консоль
  • Выход команды в стандарте diff
  • Для сокращения обращений к командам Git испольуются альясы bash

Проводим исследование дистрибутива на предмет чего нибудь подходящего:

> aptitude search color.*diff

i   colordiff
  

Нашли colordiff. Проверим, что она делает:

> aptitude show colordiff

Package: colordiff                       
State: installed
Automatically installed: no
Version: 1.0.9-1
Priority: optional
Section: universe/text
Maintainer: Ubuntu MOTU Developers 
Uncompressed Size: 111 k
Depends: perl
Description: tool to colorize 'diff' output

 ColorDiff is a wrapper for the 'diff' command. It produces the same
 output as diff, but with colored highlighting to improve
 readability. The color schemes can be customized.
 
 The output is similar to the syntax-highlighting mode of Vim or Emacs
 when editing a patch created by diff.
Homepage: http://colordiff.sourceforge.net/
  

Итак, иследование показало, что в дистрибутиве имеется утилитка для расцвечивания выхода команды diff. Будем использоватеь ее.

В качестве пейджера вместо стандартного less будем испольовать more, который поддерживает цвета "из коробки".

Устанавливаем нужные программы:

aptitude install colordiff
aptitude install more

Теперь пишем простенький скрипт на bash который будет вызывать команду git diff, передавать ей параметры командной строки и расцвечивать выход. Скрипт называем просто: _git_diff_color

Текст скрипта:

1 #! /bin/bash
2 
3 git diff "$@" | colordiff | more
4 
5 exit 0

Проверяем, работает.

Теперь назначаем альяс на наш скрипт:

alias gidi='_git_diff_color'

Естественно, скрипт должен лежать в месте, которое упомянуто в $PATH.

Тперь при наборе команды gidi или gidi имя_файла, в консоли появится красиво рацыеченный текст, читать который намноголегче и приятнее.

Ну и для комплекта, мои альясы для Git:

alias giad='git add'
alias gico='git commit'
alias gidi='_git_diff_color'
alias gilo='git log'
alias gist='git status'

Все уже украдено до нас

В комментариях ник 123 подсказал, что в команде git diff уже есть спецальный ключик для раскрашивания выхода! И точно. Команда выглядит так: git diff --color. Теперь альяс выглядит так:

alias gidi='git diff --color'

Кстати, еще ключик есть для подцвечивания: --color-words. Выводит и подсвечивает изменения с точностью до слов.

И вообще там много полезных ключиков есть, нужно будет как-нибудь с ними потщательнее ознакомиться.

Ну вот теперь, наверное все.

Опубликовано: May 25, 2011

Комментарии:


Имя: 123

а
alias gg='git grep -n --color -I'
что не работает?



Имя: evgeny

Вообще не понял мысль. По моему это не совсем то.



Имя: 123

Туплю,
$ alias gdc='git diff --color'
% git --version
git version 1.7.2.5



Имя: evgeny

Точно! Спасибо, а я и не знал про такой ключик, проверил у меня тоже работает.



Имя: adw0rd

Укажите в конфиге и всё:
[color]
diff = auto

ps. Давно юзаю colordiff для перенаправления потока сознания



Имя: adw0rd

Или по трушному:
git config --global color.diff "always"



Имя: Prot

git config color.diff auto



Имя: anonymous

~ $ git config --global color.ui true
избавит от проблем любителей изобретать велосипеды http://xkcd.com/293/



Комментировать:

Имя:

Комментарий: