Всем привет,
хочу рассказать о консольной утилите, которая значительно увеличила мою продуктивность работы с Git, и, надеюсь, ускорит и вашу также. Называется она tig и была написана канадским программистом Джонасом Фонсека (Jonas Fonseca) ещё в далёком 2006-м году, но по настоящий день она активно развивается и поддерживается в великолепном состоянии. Я хочу показать её функционал (внимание, есть относительно тяжелые gif-ки внутри) и поделиться самыми удобными способами использования.
Несмотря на обилие визуальных GUI для работы с git, многие разработчики всё же предпочитают работать в консоли. В git есть много средств для увеличения производительности — алиасы, автодополнение, автоматическая коррекция ошибок и т.д., но всё же многие рядовые действия, такие как навигация по истории коммитов, анализ diff-ов, просмотр git blame и прочее — отнимают прилично времени и не всегда удобны.
Установка
Установка подробно описана в документации на главной странице проекта.
Если вы работаете в MacOS, то tig
доступен через Homebrew:
brew install tig
В Linux она тоже доступна для всех основных репозиториев:
apt-get install tig
yum install tig
Для остальных вариантов, стандартная схема — скачать исходный код (из релизов или через git clone
и выполнить make && make install
. Это подробно описано в ссылке выше.
Использование
Вот коротенькое демо того, как выглядит интерфейс при запуске команды tig
из директории репозитория:
В целом, как и следует ожидает от графического (пусть и текстового) интерфейса, но использование программы достаточно интуитивное, но всё же для начала нужно узнать несколько базовых сочетаний клавиш, на которых вся работа с программой и строится.
Главная клавиша это — h
: показать окно помощи :)
Как видим, есть несколько режимов (views) — главный, режим просмотра diff-ов, режим лога, режим просмотра дерева файлов, blame режим, просмотр текущего статуса и т.д.
Между всеми этими режимами переключаться довольно просто, обычно достаточно стрелочками (или j
/k
) выбрать нужную запись в логе или файл и нажать Enter
, либо, как, например, в случае с blame
— соответствующую клавишу (b
).
Режимы отображаются либо на весь экран либо в dual-split режиме. Последний бывает либо горизонтальный, либо вертикальный — программа сама выбрает его в зависимости от соотношения сторон терминала, и умеет обновлять на лету. Чтобы закрыть текущий режим (и вернуться к предыдущему) — просто нажимаем q
(quit). Чтобы, наоборот, развернуть окно с текущим режимом на полный экран — O
. Переключаться между режимами в dual-split режиме — Tab
.
В режиме просмотра diff
очень удобно увеличивать количество строк сверху и снизу изменённой строки с помощью [
и ]
(уменьшить и увеличить, соответственно):
Также в программе есть функция поиска по файлам (g
— grep
), поиска в окне (/
), открытия файла во внешнем редакторе (e
) и, в целом, интерфейс будет особенно комфортен тем, кто знаком с vim
. Например, с помощью :
можно вводить различные команды, переходить к нужной строке и т.д.
Drop-in замена git
Для некоторых команд tig
может спокойно работать как drop-in замена git
.
tig status
tig log
tig show
tig blame file
tig grep pattern
tig refs
tig stash
tig status
Также, в режиме pager-а:
git show | tig
Конфигурация
tig
достаточно гибкий в плане настройки — у него есть файл конфигурации (путь к которому также можно конфигурировать через TIGRC_USER) — ~/.tigrc
и поддержка readline.
Можно создавать свои собственные команды. Например, следующая команда копирует ID коммита в буфер обмена на MacOS X:
bind generic 5 !@sh -c "echo %(commit) | pbcopy"
У проекта отличная документация, больше о расширении функционала можно прочесть в ней.
Заключение
tig
это одна из тех утилит, которые ускорили мою продуктивность ежедневной работы с git очень значительно. Не переключаясь между окнами, из терминала вы получаете очень удобный и интуитивный интерфейс для быстрой навигации по истории и изменениям вашего git-репозитория.
Программа написана на C и работает чудовищно быстро, что всегда приятно, особенно на больших репозиториях.
Ссылки
Автор: imrobot2002