JetBrains ускорила интерактивное перебазирование в средах разработки
JetBrains ускорила интерактивное перебазирование в средах разработки. Фото: из архива компании
На протяжении пятнадцати лет интеграция Git в IDE компании строилась на простом принципе: запускать стандартные команды Git и анализировать их вывод, чтобы избежать риска повреждения репозитория. Однако со временем Git усложнялся, репозитории росли, и такие операции, как интерактивная перебазировка, в монорепозитории IntelliJ IDEA могли занимать десятки секунд.
Инженеры JetBrains выяснили, что основное время уходит на последовательное извлечение коммитов, обновление рабочего дерева и заполнение индекса Git. В ответ на это они разработали оптимизацию, которая выполняет перебазирование прямо в памяти, используя низкоуровневые команды вроде git cat-file и git commit-tree, а также git merge-tree для бесконфликтного трёхстороннего слияния.
Если возникает конфликт, система переключается на обычный процесс Git и останавливается для его разрешения. В монорепозитории IntelliJ среднее время интерактивной перебазировки сократилось с десятков секунд до нескольких секунд, причём улучшение стабильно наблюдалось на всех операционных системах, хотя на Windows остаётся потенциал для дальнейшей оптимизации.
Согласно собранным данным, около 12% интерактивных перебазирований приводят к конфликтам слияния, и лишь 1% завершается ошибкой. Та же техника была применена к другим действиям, например, к выделению выбранных изменений в отдельный коммит через панель «Изменённые файлы» в журнале Git.
КомандаJetBrains выражает благодарность сообществу, в частности проекту git-revise, статье Валида Хана и обсуждениям в сообществе Jujutsu, которые помогли сформировать этот подход, говорится в сообщении компании.
Упомянутые сервисы
Комментариев пока не было