tig — улучшаем продуктивность работы с git

    Всем привет! Хочу рассказать о консольной утилите, которая значительно увеличила мою продуктивность работы с 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очень удобно увеличивать количество строк сверху и снизу изменённой строки с помощью [ и ] (уменьшить и увеличить, соответственно):



    Также в программе есть функция поиска по файлам (ggrep), поиска в окне (/), открытия файла во внешнем редакторе (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 и работает чудовищно быстро, что всегда приятно, особенно на больших репозиториях.


    Ссылки


    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 46
    • +4

      Ещё есть очень хорошая утилита hub, которая является тонкой оберткой над git и добавлет функциональность общения с github.com. С её помощью можно сделать fork, pull-request, issue и ещё несколько вещей. Код открытый: https://github.com/github/hub


      Ею можно просто обернуть git:


      alias git=hub

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

      • 0
        А чем плох SourceTree?
        • +4
          Linux
          • +3
            SmartGit
          • +1
            попробуйте GitAhead, есть под все основные OS
            • 0
              Спасибо большое, обязательно посмотрю! Давно смотрел что-нибудь нативное и приятное в использовании, а не на монстроузном Electron'e.
              • +1
                Что-то я там не понял. Для некоммерческого пользования она таки бесплатна? (увидел только закачку триала)
                • 0
                  На сайте разработчика табличка «GitAhead of the Competition», где в строке «Non Commercial» указано "Free" для «GitAhead».
                  Таблица
                  Таблица
                  • –2
                    К сожалению, таблицой маркитологи вводят в заблуждение. Бесплатные только 30 дней.
                    Но кто ищет, тот всегда найдет выход)
                    • 0
                      маркетологи*, извиняюсь
                • 0
                  Git-cola
                • +3
                  А чем плох SourceTree?

                  Аж даже любопытно какой ответ на этот вопрос вы ожидаете?

                  • +3
                    Перечень преимуществ перед SourceTree, в случае если
                    Если вы работаете в MacOS
                    • 0

                      Наверное никаких.

                  • +7

                    сильно тормозит, громоздкий UI, мышка

                    • +2
                      Пользуюсь ST несколько лет, знаю много мелких неприятных багов, которые очень сильно портят жизнь. То невозможно поставить галку «сразу пушить на сервер», то пропадали папки и репозитории из интерфейса (в старой 1.9, приходилось бекапить xml-ки), то никак не создаются папки и репозитории. Программа не дружит с русскими символами — есть проблемы когда делаешь squash, есть проблемы из консоли. Часто бывает подвисает графический rebase — приходится входить в командную строку и давать rebase --continue.

                      Причём это не на одной машине моей, это постоянно вижу на многих рабочих станциях, где проходили кодревью. Это было на восьмёрках, десятках, на разных версиях программ.

                      Я какое-то время честно делал репорты, открывал issue — пока не понял, что это прямо как об стену горохом. Программа бесплатная и ждать высокой качественной поддержки, когда у кампании другие хорошие платные продукты — немного наивно.

                      При этом продолжаю считать интерфейс ST самым лучшим графическим интерфейсом для обучения git с нуля новичков и непрограммистов (дизайнеры-верстальщики разные). Мыши, кактусы, боль, гнев, принятие, равнодушие. Просто пользуюсь.
                      • 0
                        В github клиенте тоже сталкивался с проблемами. Большие проекты с трудом загружал, периодически зависал. Например, ядро linux я так и не дождался пока загрузит, после этого больше им никогда не пользовался.
                        • 0
                          Рекомендую попробовать SmartGit. Поддержка у них великолепная, баги (когда их таки удается найти) бывает исправляются в течение пары часов, максимум за несколько дней. Программа платная, но мне кажется она того стоит. Сам пользуюсь уже много лет.
                        • +2
                          Сильно тормозит если много изменений и, бывает, съедает почти Гб памяти.
                          Пользуюсь им только ради одной киллер-фичи – позволяет коммитить отдельные строки/блоки кода даже в рамках одного файла – JetBrains, например, не умеет, а как это делать консольно понятия не имею (но уверен, что не так удобно).
                          • 0

                            git add -p

                            • 0
                              Век мануалы читай – всё-равно что-то пропустишь (-:
                              Спасибо!
                              • 0

                                Для индексации ещё посмотрите в сторону gitg (GUI).

                            • 0

                              надо попробовать tig! ставишь курсор на строчку и жмёшь "1" чтобы добавить строку, или "u", чтобы добавить кусок

                              • 0
                                Благодарю, опробую. Если не будет тормозить как ST, то есть смысл и на него перейти. Удобный TUI лучше медленного GUI.
                          • +6

                            Самый продуктивный и удобный клиент, которым я когда-либо пользовался — это плагин для Emacs Magit. Кстати, сейчас его автор собирает деньги, чтобы посветить целый год фулл-тайм разработке этого плагина.

                            • 0
                              мне вот интересно почему ни одно git-расширение, не расширяет заодно и стандартный емакс листинг директории? Хочу тобы и там подсвечивалось цветом, что у меня изменилось, что не в репе, что уже ждет комита.
                              Или я не туда смотрю?
                              • 0

                                Загуглил "emacs dired git status", что-то подобное реализовано как минимум двумя разными способами:


                                • 0
                                  спасибо! завтра поиграюсь :) чую буду допиливать первый :)
                            • +2
                              а есть такое же, только с перламутровыми пуговицами для mercurial?
                            • 0
                              Не нашел в документации: а цветовую палитру как-то можно задавать?
                            • +1
                              Пользуюсь уже несколько лет. Самое удобное, что может быть в консоли, да и не только.
                              • –11
                                Зачем люди игнорируют 35 лет прогресса, используя GUI на костылях вместо настоящего GUI? :/
                                P. S. Это полу-риторический вопрос, холивар заводить ни в коем случае не хочу :)
                                • 0
                                  Очень просто, я уже отвечал на этот вопрос: «гуи на коствлях» не тормозит!

                                  Причём это — вопрос принципиальный! Если что-то заняло чуть больше времени, вы ткнули мышом в то место, где должно было быть окошко, но «не шмогла я, не ушпеля», то реакция будет совсем не такой, как ожидается — а в TUI будет всего лишь небольшая задержка, которую вы и не заметите.

                                  Потому для получения «в настоящем GUI» такой же отзывчивости, как и в TUI нужна на два (хорошо если не на три) порядка более быстродействующая система. Не всегда это возможно и/или целесообразно…
                                  • 0
                                    Понял вас, спасибо за объяснение.
                                • 0

                                  Раз уж тут открыли викторину "назови еще один gui для git", вставлю свои пять копеек: GitKraken. Отличный GUI.
                                  Из замеченных недостатков: не очень ожидаемое поведение при работе с gitmodules. В остальном нареканий нет.

                                  • 0
                                    Давно пользуюсь, желания поискать альтернативы не было.
                                    • 0
                                      В а tig есть режим визуализации дерева коммитов близкий к команде `gitk --all`? что-то я навскидку не нашел такого
                                      • 0
                                        Поддержу викторину, пользуюсь GitExtension и в Linux и в Windows, написано для .NET и разработчики постарались с производительностью. Тормозит исключительно на неправильных репозиториях, когда много разных бинарников в переключаемых ветках (требуется обновить файлов на 200Мбт+ ). На LinuxKernel репозитории не проверял.
                                        • 0

                                          2017 год.


                                          Чтобы tig показывал utf нужны какие-то невероятные танцы с бубнами, причем применить несколько первых ответов из гугла оказалось недостаточно...

                                          • 0
                                            В 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"'
                                            • 0
                                              Любопытно будет взглянуть. Правда, сам уже давно пользуюсь самописными функциями на bash, с короткими именами или упрощенным набором аргументов.
                                              • 0
                                                457 Kb!

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.