← На главную

Google открыла Copybara для переноса кода между репозиториями

30.06.2026 23:45 · hackernews

Google открыла исходный код инструмента Copybara, который используют внутри компании. Это утилита для переноса и трансформации кода между репозиториями.

Часто один и тот же код приходится держать в нескольких хранилищах — например, в закрытом и публичном репозиториях. Copybara решает именно эту задачу. Нужно выбрать один репозиторий как основной, источник истины, но вносить изменения можно в любой из них. Инструмент умеет подхватывать правки из неавторитетного репозитория (скажем, от стороннего контрибьютора на GitHub) и переносить их в нужное место главного хранилища. С конфликтами слияния система разбирается как с обычным устаревшим изменением.

Ключевая архитектурная особенность — Copybara stateless, то есть не хранит своё состояние отдельно. Оно записывается прямо в метки коммита в целевом репозитории. Это позволяет запускать утилиту на разных машинах или в сервисе, и результат будет одинаковым.

Пока Copybara официально поддерживает только Git. Чтение из Mercurial — экспериментальная функция. Но архитектура плагинная, под любой источник и приёмник можно дописать свой модуль.

Для быстрого старта лучше всего взять готовые бинарники из weekly snapshot-релизов на GitHub. Если нужна свежая версия, придётся собирать из исходников: понадобятся JDK 11 и Bazel. Клонируете репозиторий, запускаете bazel build //java/com/google/copybara для сборки или bazel build //java/com/google/copybara:copybara_deploy.jar для исполняемого uberjar. Тесты запускаются через bazel test //....

Copybara можно использовать и как внешнюю зависимость в вашем Bazel-проекте через http_jar. Для запуска требуется Java Runtime 21 или новее. Есть и экспериментальная поддержка Docker — образ собирается из корня проекта, контейнер монтирует текущую директорию и принимает аргументы через переменные окружения вроде COPYBARA_SUBCOMMAND или COPYBARA_CONFIG.

Читать оригинал →