Всем привет! Хочу рассказать о консольной утилите, которая значительно увеличила мою продуктивность работы с 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 и работает чудовищно быстро, что всегда приятно, особенно на больших репозиториях.
Ссылки
Комментарии (45)
oxidmod
11.09.2017 14:10А чем плох SourceTree?
kulinich
11.09.2017 14:22+4Linux
LexS007
11.09.2017 14:52+1попробуйте GitAhead, есть под все основные OS
kulinich
11.09.2017 15:29Спасибо большое, обязательно посмотрю! Давно смотрел что-нибудь нативное и приятное в использовании, а не на монстроузном Electron'e.
myxo
11.09.2017 15:39+1Что-то я там не понял. Для некоммерческого пользования она таки бесплатна? (увидел только закачку триала)
GAG
11.09.2017 19:11На сайте разработчика табличка «GitAhead of the Competition», где в строке «Non Commercial» указано "Free" для «GitAhead».
Таблица
questor
11.09.2017 20:13+2Пользуюсь ST несколько лет, знаю много мелких неприятных багов, которые очень сильно портят жизнь. То невозможно поставить галку «сразу пушить на сервер», то пропадали папки и репозитории из интерфейса (в старой 1.9, приходилось бекапить xml-ки), то никак не создаются папки и репозитории. Программа не дружит с русскими символами — есть проблемы когда делаешь squash, есть проблемы из консоли. Часто бывает подвисает графический rebase — приходится входить в командную строку и давать rebase --continue.
Причём это не на одной машине моей, это постоянно вижу на многих рабочих станциях, где проходили кодревью. Это было на восьмёрках, десятках, на разных версиях программ.
Я какое-то время честно делал репорты, открывал issue — пока не понял, что это прямо как об стену горохом. Программа бесплатная и ждать высокой качественной поддержки, когда у кампании другие хорошие платные продукты — немного наивно.
При этом продолжаю считать интерфейс ST самым лучшим графическим интерфейсом для обучения git с нуля новичков и непрограммистов (дизайнеры-верстальщики разные). Мыши, кактусы, боль, гнев, принятие, равнодушие. Просто пользуюсь.LexS007
11.09.2017 21:18В github клиенте тоже сталкивался с проблемами. Большие проекты с трудом загружал, периодически зависал. Например, ядро linux я так и не дождался пока загрузит, после этого больше им никогда не пользовался.
HOMO_PROGRAMMATIS
13.09.2017 12:29Рекомендую попробовать SmartGit. Поддержка у них великолепная, баги (когда их таки удается найти) бывает исправляются в течение пары часов, максимум за несколько дней. Программа платная, но мне кажется она того стоит. Сам пользуюсь уже много лет.
TrogWarZ
11.09.2017 23:31+2Сильно тормозит если много изменений и, бывает, съедает почти Гб памяти.
Пользуюсь им только ради одной киллер-фичи – позволяет коммитить отдельные строки/блоки кода даже в рамках одного файла – JetBrains, например, не умеет, а как это делать консольно понятия не имею (но уверен, что не так удобно).
roman_kashitsyn
11.09.2017 20:10+6Самый продуктивный и удобный клиент, которым я когда-либо пользовался — это плагин для Emacs Magit. Кстати, сейчас его автор собирает деньги, чтобы посветить целый год фулл-тайм разработке этого плагина.
xiWera
12.09.2017 20:47мне вот интересно почему ни одно git-расширение, не расширяет заодно и стандартный емакс листинг директории? Хочу тобы и там подсвечивалось цветом, что у меня изменилось, что не в репе, что уже ждет комита.
Или я не туда смотрю?roman_kashitsyn
13.09.2017 00:13Загуглил "emacs dired git status", что-то подобное реализовано как минимум двумя разными способами:
nightvich
12.09.2017 09:23+1Пользуюсь уже несколько лет. Самое удобное, что может быть в консоли, да и не только.
VioletGiraffe
12.09.2017 10:11-11Зачем люди игнорируют 35 лет прогресса, используя GUI на костылях вместо настоящего GUI? :/
P. S. Это полу-риторический вопрос, холивар заводить ни в коем случае не хочу :)khim
12.09.2017 13:38Очень просто, я уже отвечал на этот вопрос: «гуи на коствлях» не тормозит!
Причём это — вопрос принципиальный! Если что-то заняло чуть больше времени, вы ткнули мышом в то место, где должно было быть окошко, но «не шмогла я, не ушпеля», то реакция будет совсем не такой, как ожидается — а в TUI будет всего лишь небольшая задержка, которую вы и не заметите.
Потому для получения «в настоящем GUI» такой же отзывчивости, как и в TUI нужна на два (хорошо если не на три) порядка более быстродействующая система. Не всегда это возможно и/или целесообразно…
chabapok
12.09.2017 12:19В а tig есть режим визуализации дерева коммитов близкий к команде `gitk --all`? что-то я навскидку не нашел такого
lolikandr
12.09.2017 19:33Поддержу викторину, пользуюсь GitExtension и в Linux и в Windows, написано для .NET и разработчики постарались с производительностью. Тормозит исключительно на неправильных репозиториях, когда много разных бинарников в переключаемых ветках (требуется обновить файлов на 200Мбт+ ). На LinuxKernel репозитории не проверял.
knutov
13.09.2017 04:542017 год.
Чтобы tig показывал utf нужны какие-то невероятные танцы с бубнами, причем применить несколько первых ответов из гугла оказалось недостаточно...
echuraev
13.09.2017 10:58В vim использую Gitv: github.com/gregsexton/gitv
Очень удобно, особенно используя вместе с fugitive и gitgutter. В окне просмотра файлов можно скрыть изменения, чтобы видеть только список файлов в коммите, а потом уже открывать конкретный и смотреть изменения.
Я даже себе alias в консоли сделал, чтобы сразу открыть vim с gitv в текущем репозитории:
alias gitv='vim "$(git rev-parse --show-toplevel)"/.git/index -c "Gitv" -c "tabonly"'
RadicalDreamer
15.09.2017 00:23Любопытно будет взглянуть. Правда, сам уже давно пользуюсь самописными функциями на bash, с короткими именами или упрощенным набором аргументов.
acmnu
Ещё есть очень хорошая утилита hub, которая является тонкой оберткой над git и добавлет функциональность общения с github.com. С её помощью можно сделать fork, pull-request, issue и ещё несколько вещей. Код открытый: https://github.com/github/hub
Ею можно просто обернуть git:
После этого все будет работать также, за исключением того, что в git появятся несколько новых команд.