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


Ссылки


Комментарии (45)


  1. acmnu
    11.09.2017 14:03
    +4

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


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


    alias git=hub

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


  1. oxidmod
    11.09.2017 14:10

    А чем плох SourceTree?


    1. kulinich
      11.09.2017 14:22
      +4

      Linux


      1. Carburn
        11.09.2017 14:29
        +3

        SmartGit


        1. myxo
          11.09.2017 14:41
          +7

          консоль


      1. LexS007
        11.09.2017 14:52
        +1

        попробуйте GitAhead, есть под все основные OS


        1. kulinich
          11.09.2017 15:29

          Спасибо большое, обязательно посмотрю! Давно смотрел что-нибудь нативное и приятное в использовании, а не на монстроузном Electron'e.


        1. myxo
          11.09.2017 15:39
          +1

          Что-то я там не понял. Для некоммерческого пользования она таки бесплатна? (увидел только закачку триала)


          1. GAG
            11.09.2017 19:11

            На сайте разработчика табличка «GitAhead of the Competition», где в строке «Non Commercial» указано "Free" для «GitAhead».

            Таблица
            Таблица


          1. LexS007
            11.09.2017 19:47
            -2

            К сожалению, таблицой маркитологи вводят в заблуждение. Бесплатные только 30 дней.
            Но кто ищет, тот всегда найдет выход)


            1. LexS007
              11.09.2017 20:59

              маркетологи*, извиняюсь


      1. cl0ne
        11.09.2017 16:12

        Git-cola


    1. acmnu
      11.09.2017 14:44
      +3

      А чем плох SourceTree?

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


      1. oxidmod
        11.09.2017 14:47
        +3

        Перечень преимуществ перед SourceTree, в случае если

        Если вы работаете в MacOS


        1. acmnu
          11.09.2017 15:19

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


    1. storoj
      11.09.2017 16:31
      +7

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


    1. questor
      11.09.2017 20:13
      +2

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

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

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

      При этом продолжаю считать интерфейс ST самым лучшим графическим интерфейсом для обучения git с нуля новичков и непрограммистов (дизайнеры-верстальщики разные). Мыши, кактусы, боль, гнев, принятие, равнодушие. Просто пользуюсь.


      1. LexS007
        11.09.2017 21:18

        В github клиенте тоже сталкивался с проблемами. Большие проекты с трудом загружал, периодически зависал. Например, ядро linux я так и не дождался пока загрузит, после этого больше им никогда не пользовался.


      1. HOMO_PROGRAMMATIS
        13.09.2017 12:29

        Рекомендую попробовать SmartGit. Поддержка у них великолепная, баги (когда их таки удается найти) бывает исправляются в течение пары часов, максимум за несколько дней. Программа платная, но мне кажется она того стоит. Сам пользуюсь уже много лет.


    1. TrogWarZ
      11.09.2017 23:31
      +2

      Сильно тормозит если много изменений и, бывает, съедает почти Гб памяти.
      Пользуюсь им только ради одной киллер-фичи – позволяет коммитить отдельные строки/блоки кода даже в рамках одного файла – JetBrains, например, не умеет, а как это делать консольно понятия не имею (но уверен, что не так удобно).


      1. symbix
        12.09.2017 01:21

        git add -p


        1. TrogWarZ
          12.09.2017 01:41

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


      1. storoj
        12.09.2017 01:32

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


        1. TrogWarZ
          12.09.2017 01:42

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


  1. roman_kashitsyn
    11.09.2017 20:10
    +6

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


    1. xiWera
      12.09.2017 20:47

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


      1. roman_kashitsyn
        13.09.2017 00:13

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



        1. xiWera
          13.09.2017 00:27

          спасибо! завтра поиграюсь :) чую буду допиливать первый :)


  1. calx
    11.09.2017 21:51
    +2

    а есть такое же, только с перламутровыми пуговицами для mercurial?


    1. LexS007
      11.09.2017 22:03

      Посмотрите эти:
      hgv
      hgview с hgview-curses


    1. LexS007
      11.09.2017 22:08

      А, кстати, еще есть lairucrem)


  1. zmeykas
    12.09.2017 01:18

    Не нашел в документации: а цветовую палитру как-то можно задавать?


    1. Carburn
      12.09.2017 03:08

      Можно цвета изменять jonas.nitro.dk/tig/tigrc.5.html


  1. nightvich
    12.09.2017 09:23
    +1

    Пользуюсь уже несколько лет. Самое удобное, что может быть в консоли, да и не только.


  1. VioletGiraffe
    12.09.2017 10:11
    -11

    Зачем люди игнорируют 35 лет прогресса, используя GUI на костылях вместо настоящего GUI? :/
    P. S. Это полу-риторический вопрос, холивар заводить ни в коем случае не хочу :)


    1. khim
      12.09.2017 13:38

      Очень просто, я уже отвечал на этот вопрос: «гуи на коствлях» не тормозит!

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

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


      1. VioletGiraffe
        12.09.2017 13:49

        Понял вас, спасибо за объяснение.


  1. greabock
    12.09.2017 10:52

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


  1. ilyaplot
    12.09.2017 11:21

    Давно пользуюсь, желания поискать альтернативы не было.


  1. chabapok
    12.09.2017 12:19

    В а tig есть режим визуализации дерева коммитов близкий к команде `gitk --all`? что-то я навскидку не нашел такого


  1. lolikandr
    12.09.2017 19:33

    Поддержу викторину, пользуюсь GitExtension и в Linux и в Windows, написано для .NET и разработчики постарались с производительностью. Тормозит исключительно на неправильных репозиториях, когда много разных бинарников в переключаемых ветках (требуется обновить файлов на 200Мбт+ ). На LinuxKernel репозитории не проверял.


  1. knutov
    13.09.2017 04:54

    2017 год.


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


  1. 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"'


  1. RadicalDreamer
    15.09.2017 00:23

    Любопытно будет взглянуть. Правда, сам уже давно пользуюсь самописными функциями на bash, с короткими именами или упрощенным набором аргументов.


  1. naprasno
    15.09.2017 05:33

    457 Kb!