Skip to content

Git

Плагин Git показывает состояние репозитория Git прямо в панели файлов — без отдельного приложения и без терминала. Он добавляет две колонки, подменю Git, закреплённую панель для подготовки и фиксации изменений и окна для истории, blame, веток, конфликтов и перебазирования. Он работает через git, уже установленный на вашем Mac. Это плагин, поэтому его можно выключить или удалить в Конфигурация ▸ Плагины….

Что он добавляет

  • Две колонки в списке файлов — Состояние Git и Ветка. У каждого файла показаны значок и короткое слово состояния (Изменён, Добавлен, Удалён, Не отслеживается, Переименован, Скопирован, Конфликт, Игнорируется, Тип изменён), с пометкой (подготовлен), если изменение уже в индексе; колонка Ветка показывает ветку, на которой стоит репозиторий этого файла. Колонки включаются в Конфигурация ▸ Колонки… (см. Режимы просмотра и сортировка).
  • Меню Git — в Команды ▸ Git и в контекстном меню файла.

Окно «Состояние Git» с текущей веткой и изменёнными файлами репозитория (Рисунок: «Состояние Git» называет ветку и каждое изменение в рабочем дереве.)

Панель: подготовить, зафиксировать, синхронизировать

Команды ▸ Git ▸ Панель закрепляет вид, который делит рабочее дерево на подготовленное, изменённое и неотслеживаемое. Выберите файлы и используйте Подготовить, Снять подготовку или Отменить…, введите сообщение и нажмите Зафиксировать — с Исправить изменение вкладывается в предыдущую фиксацию. Получить и Отправить рядом, там, где фиксация и так происходит; оба показывают ход и их можно прервать.

Фиксируется индекс, а не git commit -a: фиксируется то, что вы подготовили.

История, blame и веб

  • История… перечисляет фиксации с графом дорожек, ссылки, указывающие на каждую (● main, ↗ origin/main, ⚑ v1.0), и файлы, которых коснулась каждая фиксация. Return или двойной щелчок открывает версию этого файла против её предшественницы в окне сравнения. Откатить фиксацию и Cherry-pick тоже там, и оба отказываются заранее, если рабочее дерево не чисто.
  • История файла… — то же окно для одного файла.
  • Blame (список)… показывает каждую строку с её фиксацией, автором и датой. Blame в редакторе помещает те же сведения на поле редактора, рядом с номерами строк: наведение на строку показывает сообщение фиксации, щелчок открывает её против предшественницы.
  • Открыть в вебе открывает файл, фиксацию или ветку на GitHub, GitLab, Bitbucket или Azure DevOps, собрав адрес из URL удалённого репозитория — без учётной записи и без токена. Для узла, устройство ссылок которого ему неизвестно, он предлагает страницу репозитория, а не гадает.

Ветки, отложенные изменения и метки

Ветки, отложенные изменения и метки… перечисляет всё трое. Переключить, создать, слить или удалить ветку; отправить, извлечь или отбросить отложенное; создать, удалить или отправить метку либо переключиться на неё — метка не ветка, поэтому заранее сказано, что HEAD останется отсоединённым. Выборка, Получить и Отправить — в том же окне, и их можно прервать на ходу.

Отправка метки намеренно сделана отдельным действием: git push метки с собой не берёт.

Конфликты

Разрешить конфликт… перечисляет конфликтные области файла под курсором и принимает решение по каждой: наше, их, оба — или оставить открытой. Затем Записать файл или Записать и подготовить. Плагин отказывается подготавливать, пока хоть одна область открыта — Git с готовностью зафиксирует метки <<<<<<< — и скорее не тронет файл, чьи метки он не может прочесть, чем станет их угадывать. Для области, где обе стороны нужно переплести вручную, Открыть в редакторе — одна кнопка.

Перебазирование

Перебазировать… перечисляет фиксации впереди вышестоящей ветки — те, которых больше ни у кого пока нет — и позволяет их сжать, присоединить как правку, отбросить, переставить или переписать сообщение, прежде чем ветка будет переписана. Если перебазирование остановится на конфликте, то же окно становится Продолжить / Пропустить фиксацию / Прервать, чтобы недоделанное перебазирование не пришлось завершать в терминале.

Игнорирование файлов и учётные данные

  • Игнорировать этот файл…, Игнорировать этот тип файлов… и Игнорировать эту папку… вписывают нужный шаблон в .gitignore — привязанный там, где положено, чтобы игнорирование этой папки build не игнорировало каждую папку с именем build.
  • Учётные данные… сообщают, как этот репозиторий проходит проверку подлинности: SSH или HTTPS, настроен ли помощник учётных данных, запущен ли агент SSH и держит ли он ключ. Где это помогает, предлагается ровно одно действие — позволить Git хранить учётные данные в связке ключей macOS. Плагин никогда не спрашивает парольную фразу, не показывает и не сохраняет её.

Примечания

  • Плагин использует системный Git по пути /usr/bin/git. Если Git не установлен, команды сообщают, что Git недоступен. (Его приносят Xcode Command Line Tools.)
  • Состояние репозитория читается один раз на папку и кэшируется, чтобы прокрутка большого репозитория оставалась быстрой; кэш обновляется после любой команды, меняющей дерево, и следует за фиксацией, сделанной вне приложения.
  • Связанные рабочие деревья и подмодули поддерживаются: файл внутри подмодуля показывает состояние и ветку подмодуля, а не родительского репозитория.
  • У каждого списка есть контекстное меню, Return выполняет основное действие, а Cmd+R обновляет окно.