Суть инструмента
Copybara — это утилита, предназначенная для автоматизации процессов синхронизации исходного кода. Основной сценарий использования: поддержание актуальности кода в нескольких репозиториях одновременно. Классический кейс — синхронизация закрытого (confidential) и публичного (public) репозиториев, где один из них выступает в роли «источника истины» (authoritative repository).
Инструмент позволяет не только копировать код, но и трансформировать его: менять пути, переименовывать файлы, исключать определенные элементы (например, внутренние README) и применять сложные правила перемещения. При этом Copybara работает без сохранения собственного состояния (stateless), храня метаданные о синхронизации непосредственно в сообщениях коммитов в целевом репозитории.
Ключевые возможности и архитектура
Архитектура Copybara спроектирована так, чтобы несколько пользователей или CI/CD-сервисов могли использовать одну конфигурацию для одних и тех же репозиториев, получая детерминированный результат. Поддерживается импорт изменений из неавторитетного репозитория в авторитетный, с автоматической обработкой конфликтов слияния.
| Характеристика | Описание |
|---|---|
| Основной формат репозиториев | Git (полная поддержка) |
| Mercurial (чтение) | |
| Требования к Java | JDK 11 для сборки, JRE 21+ для запуска готовых бинарников (class version 65.0) |
| Сборка | Bazel (поддержка IntelliJ плагина) |
| Конфигурация | Файлы .sky, хранящиеся в VCS |
Пример конфигурации
Настройка Copybara осуществляется через файл конфигурации (например, copy.bara.sky). Ниже приведен пример workflow, который копирует содержимое из GitHub-репозитория в локальный bare-репозиторий, исключая файл README_INTERNAL.txt и трансформируя пути в файлах BUILD:
- Origin: Git-репозиторий (например,
github_origin). - Destination: Локальный Git-репозиторий.
- Transformations: Замена путей в
BUILDфайлах и перемещение директорий.
Как начать использовать
Google предоставляет два основных способа запуска:
- Готовые бинарники: Еженедельные «snapshot»-релизы доступны на GitHub. Для их работы требуется Java Runtime 21 или выше. Рекомендуется использовать
http_jarв Bazel для интеграции. - Сборка из исходников: Требуется установка JDK 11 и Bazel. Команды сборки:
bazel build //java/com/google/copybaraиbazel build //java/com/google/copybara:copybara_deploy.jar.
Также доступна экспериментальная поддержка Docker. Образ можно собрать командой docker build --rm -t copybara . и запускать с монтированием текущей директории и конфигов Git.
Почему это важно
Для организаций, работающих с монолитами, разбитыми на несколько репозиториев, или с моделями безопасности, требующими разделения кода на публичную и внутреннюю части, Copybara становится критически важным инструментом. Открытие этого инструмента позволяет сообществу использовать проверенный временем Google-решение для управления сложными зависимостями и синхронизацией кода, экономя время на разработку собственных аналогов.
Источник: Github ↗
