Документация

Документация/Рабочее место

Git-клиент, аккаунты и публикация

Встроенный Git: статус, коммит, ветки, журнал с графом, rebase, cherry-pick, stash и worktree. Здесь же — Git-аккаунты, клонирование и публикация репозитория, а merge request открывает агент.

В DevMachine ADE есть свой Git-клиент: коммиты, ветки, журнал с графом, слияния и конфликты — без отдельной программы. Клиент и агент работают с одной рабочей копией, поэтому правки агента сразу видны в списке изменений. Если вы работали в IDE JetBrains, многое покажется знакомым: Git-операции здесь называются по-английски, как и там.

Как открыть

  • Кнопка «Git» в шапке: ⌘ 9 на macOS, Alt 9 на Windows и Linux (в наборе сочетаний VS Code — ⌃ ⇧ G / Ctrl Shift G).
  • Чип ветки в шапке — быстрые действия: поиск «Ветки и действия…», «Pull…», «Commit…», «Push», «Fetch», «Новая ветка…», «Checkout tag или revision…», «Недавние» и ветки Local / Remote по папкам. Если выбрать здесь удалённую ветку, она станет локальной отслеживающей веткой.

Янтарная точка на значке Git значит, что папка проекта ещё не репозиторий или у репозитория нет remote. Для каждого случая в виде Git свои кнопки:

  • Папка ещё не репозиторий — кнопки «git init — сделать папку репозиторием», «Проект из git…» и «Аккаунты…».
  • У репозитория нет remote — над журналом полоса «Нет remote» с кнопками «Опубликовать…», «Добавить remote…» и «Аккаунты…». Нажмите «Опубликовать…», чтобы создать новый репозиторий на хосте, или «Добавить remote…», чтобы указать адрес репозитория, который там уже есть.

Вид «Git»

  • Слева — ветки. Поиск «Ветка или tag», группы Local, Remote, Tags и Worktree, пометка «HEAD отсоединён».
  • В середине — журнал с графом. Фильтры «Текст или hash», «Ветка» и «Автор», кнопка «Показать ещё 50».
  • Справа — коммит. «Подробности» и «Файлы». Щёлкните файл — откроется дифф в раскладке «Рядом» или «Единый», с кнопками «Открыть в редакторе» и «Скопировать путь». Стрелки ↑ ↓ листают файлы, а «Журнал» или Esc возвращают назад. Дифф можно читать и по смыслу — см. Дифф «Код / Поведение».

Несколько репозиториев в одной папке

Если проект — папка, в которой лежат репозитории (до трёх уровней вглубь), вид Git покажет их список и поле «Фильтр репозиториев». Выберите нужный, и вид будет работать с ним. «Сменить» возвращает к списку. Чтобы сделать репозиторием саму папку, нажмите «git init в этой папке…».

Коммит

  1. Откройте окно коммита: «Commit…» в виде Git или в чипе ветки, либо ⌘ K (Ctrl K).
  2. В окне два списка: «Изменения» и «Новые файлы». По умолчанию все флажки отмечены. Снимите флажки с файлов, которые не хотите коммитить: в коммит попадут только отмеченные.
  3. Заполните «Заголовок commit» и, если хотите, «Описание — необязательно». Черновик сохранится, даже если закрыть окно.
  4. Нажмите «Commit» (⌘ ⏎) или «Commit and Push». После «Commit and Push» откроется окно отправки: в нём «Commits для push», выбор remote и флажок «Push tags».

Кнопка «Commit…» есть и в Изменениях сессии. Учтите: она коммитит все рабочие изменения проекта. Сессия — это чат, а у всех чатов одного проекта общая рабочая копия, поэтому в коммит попадут и правки агента из других чатов. Если они не нужны, снимите с этих файлов флажки в окне коммита.

Ветки и история

Операции есть на панели вида и в меню по правому щелчку на ветке или коммите:

ЧтоОперации
Обмен с remoteFetch, Pull, Pull --rebase, Push, Force push… (с защитой --force-with-lease: если в remote появились чужие коммиты, push отменится)
ВеткиCheckout, «Новая ветка отсюда…», «Новый tag…», «Удалить ветку…», «Сравнить с …», «Сравнить с локальными»
СлияниеMerge, Rebase
КоммитыCherry-pick, Revert, «Checkout revision», «Скопировать revision»
Переписать историю«Reset текущей ветки сюда…» (Soft, Mixed, Hard); «Squash до этого commit…» сливает в один коммиты от HEAD до выбранного включительно (только для линейной истории)
Stash«Stash» откладывает все изменения; в списке stash их можно «Вернуть» (pop), «Применить» (apply) или удалить

Важно

Reset в режиме Hard удаляет изменения снятых коммитов и локальные правки, и вернуть их нельзя.

Конфликты

Операция с конфликтом не зависает. Приходит уведомление со списком файлов и кнопкой «Показать конфликты». Над журналом появляется полоса, например «Rebase остановлен», с кнопками «Конфликты», «Abort» и, по ситуации, «Продолжить rebase» или «Завершить merge». Разрешите конфликты в редакторе или попросите об этом агента, а потом продолжите операцию.

Worktree

Группа «Worktree» в списке веток показывает все рабочие копии репозитория. Щелчок по копии открывает её как проект. Копия, в которой вы сейчас работаете, помечена «здесь», основная — «основная копия». Копия с пометкой «папки нет» не открывается: её папки больше нет на диске. Агент тоже умеет работать в отдельной копии — см. Задача в отдельной копии проекта.

Git-аккаунты

С аккаунтом можно отправлять и получать изменения по HTTPS без пароля и публиковать репозитории, а агент сможет открывать merge request.

  1. Откройте «Настройки → Git-аккаунты» (группа «Подключения») или нажмите «Аккаунты…» в виде Git.
  2. Нажмите «Добавить аккаунт» и выберите тип: GitHub, GitLab или «Другой». Если у вас свой сервер GitLab, укажите «Адрес сервера».
  3. Нажмите «Создать на GitHub» или «Создать на GitLab». В браузере откроется страница нового токена, где права уже выбраны (GitHub: repo и workflow, GitLab: api). Создайте там токен и вставьте его в поле.
  4. Нажмите «Проверить и добавить». Логин приложение узнает само.

Для типа «Другой» шаги 3 и 4 выглядят иначе: кнопки создания токена нет. Укажите «Адрес сервера» и «Логин», вставьте токен, созданный на этом сервере, и нажмите «Сохранить». Проверить такой токен у хоста приложение не может.

Приложение использует токен для Push, Pull, Fetch и клонирования по HTTPS и только на хосте этого аккаунта. Токен хранится в системной связке ключей. Если связки нет, токен живёт только до перезапуска. В меню аккаунта есть «Заменить токен» и «Удалить аккаунт».

Клонировать репозиторий

  1. Нажмите «Из git…» на стартовом экране или выберите в меню «Проект» → «Проект из git…».
  2. В поле «Адрес репозитория» вставьте адрес SSH или HTTPS.
  3. Заполните «Папка» и «Имя папки».
  4. Если репозиторий приватный, адрес HTTPS, а Git-аккаунта нет, заполните «Логин» и «Токен или пароль». Они нужны только для этого клонирования и не сохраняются.

По SSH используются ключи из ssh-agent и ~/.ssh.

Опубликовать репозиторий

Если у репозитория нет remote, в виде Git есть кнопка «Опубликовать…»:

  1. Выберите «Аккаунт» (GitHub или GitLab с токеном).
  2. Укажите «Имя репозитория» и выберите «Приватный» или «Публичный».
  3. Нажмите «Опубликовать». Приложение создаст на хосте пустой репозиторий, сделает его origin и отправит туда текущую ветку.

Если репозиторий на хосте уже есть, нажмите «Добавить remote…».

Merge request и pull request

Merge request в GitLab или pull request в GitHub открывает агент. Он работает через Git-аккаунт, добавленный в настройках, поэтому отдельно подключать агента не нужно. Кнопки для pull request в приложении нет. Попросите агента, например: «отправь ветку и открой merge request». Он отправит ветку, откроет запрос и пришлёт ссылку.

  • Токен агент не получает: запросы к хосту делает приложение.
  • Агент отправляет изменения только в свою ветку. Force push он не делает, в ветку по умолчанию ничего не отправляет.
  • У аккаунта типа «Другой» нет API, поэтому merge request через него не открыть.

Сочетания клавиш

В наборе JetBrains, который стоит по умолчанию:

ДействиеmacOSWindows и Linux
Вид «Git»⌘ 9Alt 9
Commit⌘ KCtrl K
Push⇧ ⌘ KCtrl Shift K
Pull⌘ TCtrl T
Ветки⌃ VAlt `

В наборе VS Code сочетание есть только у вида «Git», у остальных команд его нет.

Ограничения

  • Нужен установленный git.
  • Коммит, push и fetch используют ваши настройки git: хуки, SSH, подпись коммитов и помощники учётных данных.
  • В проекте на сервере git работает на сервере, с учётными данными сервера. Токены Git-аккаунтов этого компьютера туда не передаются.
  • Публиковать репозитории и открывать merge request можно только в GitHub и GitLab.
  • Push, fetch и pull идут на ваш git-хостинг. Токен аккаунта уходит только на хост этого аккаунта.

Что дальше

Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.