IntelliJ IDEA — фактически основной инструмент наших разработчиков. Года полтора назад мы публиковали собрание полезных фишек IDEA. С тех пор прошло много времени, а мы насобирали новую подборку — теперь уже для тех, кто только начинает работать в IDEA с Git. Кому интересно — добро пожаловать под кат.
Снова рассказываем по мотивам внутреннего митапа.
Ссылки на предыдущие части:
IntelliJ IDEA хороша тем, что при настройке проекта сама автоматически интегрируется с Git и поддерживает большую часть функциональности, добавляя к ней свои мелкие “плюшки”. Их же можно получить, работая с Git напрямую или через консоль. Но зачастую сделать это в IDE удобнее. К примеру, в IDEA намного проще разбираться с конфликтами, используя трехоконный интерфейс, нежели делать то же самое в git-овой консоли.
Ниже мы собрали несколько фишек, которые наши коллеги посчитали особенно удобными.
Выбираем быстрый метод работы с Git-репозиторием
Постоянно переключаться между IntelliJ IDEA и браузером, ходить в GitHub, чтобы что-то поменять или поправить, неудобно. Гораздо удобнее и, что удивительно, быстрее делать через IDE.
IDEA позволяет быстро переключаться между ветками и даже выполнять Rebase или Merge через меню в правом нижнем углу. Причем, субъективно переключение в IDEA работает в большинстве случаев быстрее, нежели то же самое изменение ветки из консоли. Все благодаря тому, что IDE умеет видеть разночтения между коммитами и ветками, позволяя быстрее индексировать эти файлы.
Из контекстного меню IDEA доступны все стандартные методы работы с Git. И здесь хочется сделать один акцент относительно переключения между ветками. IDEA умеет запоминать воркспейс в привязке к определенной ветке и восстанавливать его после возвращения на нее же (открывать все те файлы, что были открыты при работе над этой веткой, вплоть до восстановления настроек редактора и форматирования). Переключаясь обратно, вы как бы возвращаетесь в точку, где остановились.
По умолчанию эта опция включена, но не для всех она удобна. Ее можно отключить (или наоборот включить) в настройках.
Откладываем изменения на полку (Shelve)
В прошлой подборке фишек мы уже вспоминали про Shelve. Это аналог git stash, который позволяет не смешивать контексты при переключении между задачами. Но тогда мы не раскрывали подробностей, почему использовать его удобнее, чем git stash.
Предположим, к моменту переключения на новую задачу у нас есть некоторые изменения, которые еще рано коммитить. Чтобы не потерять предыдущие изменения, мы можем положить их “на полку” (shelve). Сделать это можно с помощью CTRL + SHIFT + H через окно Git.
После выполнения этой команды контекст откатывается к последнему коммиту, а изменения остаются на локальном диске в patch-файле. При изымании изменений с полки (unshelve) правки применяются к текущей ветке проекта.
Изменения, которые не были закоммичены, автоматически отправляются на полку. Полок может быть несколько. Подробности от разработчика есть здесь.
Главное отличие IDEA shelve от git stash в том, что последний по умолчанию работает по принципу стека — то, что в него попало последним, будет изъято первым. Это не всегда удобно. А с разных полок изменения можно брать в произвольном порядке.
Плюс реализации shelve именно в IDEA в том, что инструмент позволяет расшарить коллеге изменения, лежащие на полке. При этом создается патч, который можно отправить по почте или через мессенджер. Это удобно, например во время рефакторинга. Поправленную функцию можно быстро перекинуть коллеге, и он сможет применить его на своей задаче. Это немного нарушает рабочий процесс, но для небольших изменений на стадии автотестирования такое допустимо. Так что если разобраться, штука эта очень полезная.
Ищем историю изменений в Git
В IDEA Git History показывает в табличной форме историю всех изменений. Представление это не идеально, но намного удобнее, нежели в консоли.
Инструмент помогает делать код-ревью, сравнивая текущую ветку с каким-либо коммитом — IDEA подсвечивает внесенные правки. Так можно, например, сравнивать коммит с мастер-веткой.
С помощью истории изменений можно также объединить несколько коммитов в один. Для этого достаточно выделить последние коммиты, откатить их по одному, а затем разом вернуть. В итоге они окажутся в одном дополнительном коммите.
Кстати, из истории изменений выбранные коммиты можно откладывать на полку (в любом порядке). Восстанавливать с полки их также можно произвольно.
Коммитим в несколько репозиториев
Предположим, у вас был репозиторий кода с проектом А и другой репозиторий под смежный проект — B. Но при добавлении новой функциональности у вас появилась общая библиотека и вы ее вынесли в отдельный репозиторий. При исправлении этого общего кода иногда надо поправить что-то в проектах А и B. Несколько IDE для этого открывать неудобно. Гораздо проще добавить все проекты в IDEA и создать для них новую общую ветку, которая позволит в дальнейшем все действия производить сразу в трех репозиториях.
Естественно, одновременные действия возможны только в общие ветки. IDEA даже предупредит, если ветки в проектах не будут совпадать. Проблема этой киллер-фичи только в том, что на рабочей станции должно хватить памяти для двух или трех проектов — 10 Гб на практике оказывается мало, чтобы адекватно срабатывали поиски, индексирование и прочие “бытовые” вещи.
Ориентируемся в новом для себя проекте
В окне Git есть вкладка Local changes, которая показывает последние измененные файлы. Вкладка доступна, только если в Settings -> Version Control -> Commit отмечен пункт Use non modal committing interface. Правда, в этом режиме скрываются разночтения между файлами. В целом некоторым этот режим кажется более удобным — раньше он был единственным в IDEA.
На этом пока все. Если вам есть, чем поделиться с нашими коллегами, пишите в комментариях.
Статья написана по материалам митапа, который проводил Александр Козачук, Максилект.