Weave: умное слияние в Git для снижения конфликтов
Weave — это инструмент для умного слияния в Git, который решает проблемы с конфликтами, возникающими при независимых изменениях в одних и тех же файлах. Он предлагает более точный подход, чем стандартные механизмы Git, различая изменения на уровне сущностей (функций, классов и ключей) с помощью парсинга кода через tree-sitter, что ведет к снижению ложных конфликтов на ~95%.
Проект будет полезен командам, работающим с большими кодовыми базами и сильной модульной архитектурой, где часто происходят изменения от разных разработчиков. Weave ориентирован на разработчиков, использующих Git, и необходим тем, кто хочет минимизировать время, затрачиваемое на разрешение конфликтов. Запуск Weave возможен через стандартные механизмы установки на Rust, а также доступен через Homebrew.
Обрати внимание, что проект пока находится на ранне стадии, и полноценная поддержка может отсутствовать для некоторых языков и конфигураций. Если ты часто сталкиваешься с конфликтами в Git, Weave может стать хорошим решением для улучшения процессов разработки.
Проект weave от Ataraxy Labs представляет собой инструмент для решения конфликта слияния в Git на основе семантики, а не просто на основе строк. Такой подход особенно актуален, когда несколько агентов или разработчиков работают над одной и той же кодовой базой. Вместо того, чтобы просто сравнивать и сливать строки, weave использует tree-sitter для разбора кода на функции, классы и ключи, что позволяет более точно определять конфликты и автоматически их разрешать.
Проблема
Обычный процесс слияния в Git сталкивается с проблемами, когда две ветки вносят изменения в один и тот же файл, даже если изменения касаются разных функций. Git видит это как конфликт и требует вмешательства человека. Например:
<<<<<<< HEAD
export function validateToken(token: string): boolean {
return token.length > 0 && token.startsWith("sk-");
}
=======
export function formatDate(date: Date): string {
return date.toISOString().split('T')[0];
}
>>>>>>> feature-branch
В данном случае изменения независимы и не должны были бы вызывать конфликт, но Git требует ручного разрешения.
Как работает weave
Weave меняет подход к слиянию, сравнивая код на уровне семантических сущностей, а не просто строк. Этот процесс включает несколько шагов:
- Анализ всех трех версий кода (основной, нашей и их) для извлечения семантических сущностей.
- Соответствие сущностей по их идентичности, включая переименования.
- Слияние на уровне сущностей, где изменения в разных сущностях автоматически разрешаются, а конфликты возникают только при несовместимых изменениях одной и той же сущности.
Это позволяет избежать ложных конфликтов на независимых изменениях и снижает необходимость ручного вмешательства.
Установка и настройка
Установить weave можно с помощью Homebrew:
brew install weave
Либо собрать из исходников, что требует установленного Rust:
git clone https://github.com/Ataraxy-Labs/weave
cd weave
cargo install --path crates/weave-cli # для `weave`
cargo install --path crates/weave-driver # для `weave-driver`
После установки нужно выполнить команду для настройки weave в данном репозитории:
weave setup
В этом случае все обычные операции слияния Git будут переходить в управление weave. Для отмены настройки:
weave setup --off
Ограничения
Несмотря на свои преимущества, weave имеет некоторые ограничения:
- Поддержка только определенных языков программирования (например, TypeScript, Python, Go и др.). Для языков, таких как Vue, Svelte, ERB и Haskell, используется обычное слияние по строкам.
- Файлы размером более 1 МБ и двоичные файлы также обрабатываются с помощью слияния по строкам.
- Существуют некоторые ограничения на уровень управления конфликтами между разными агентами, так как система не принудительно выставляет блокировки на изменениеclaimed сущностей.
Для получения дополнительной информации о проекте и его функционале можно обратиться к [официальному репозиторию](https://github.com/Ataraxy-Labs/weave).
Открыть на GitHub: Ataraxy-Labs/weave →
RepoRadar