概要
- Copybara はGoogleが開発した、複数リポジトリ間でコードを変換・移動するツール
- 権威リポジトリ を指定し、片方を「真実のソース」として同期管理
- Git リポジトリに対応し、Mercurialは実験的サポート
- stateless設計 で複数ユーザーやサービスで同じ設定・結果を共有可能
- 導入・ビルド方法 やDocker利用法など多様な運用に対応
Copybaraの概要と主な用途
- Copybara は、ソースコードを複数のリポジトリ間で変換・移動するためのツール
- Google社内で利用されているが、 OSS としても公開
- 秘密リポジトリと公開リポジトリの 同期管理 用途が一般的
- どちらか一方を 権威リポジトリ(source of truth) として指定
- どちらのリポジトリからも コントリビュート やリリース作成が可能
- 主な用途
- 秘密リポジトリから公開リポジトリへの 部分的コード移行
- 公開リポジトリから秘密リポジトリへの インポート
- 非権威リポジトリでの変更を権威リポジトリへ 反映
- マージコンフリクト は通常のリポジトリ管理と同様に処理
Copybaraの特徴
- stateless設計 で、状態管理はコミットメッセージのラベルとして保存
- 複数ユーザーやCIサービスで同じ設定・リポジトリを利用可能
- 現時点で対応しているリポジトリ
- Git (完全対応)
- Mercurial (実験的サポート)
- 拡張性の高いアーキテクチャ で、今後他のリポジトリタイプにも公式対応予定
基本的な設定例
- 設定ファイル(例:copy.bara.sky)で ワークフロー や変換内容を定義
- 例:origin(github)、destination(ローカルGit)、ファイル選択、変換処理(core.replace/core.move)など
- 実行例
$ (mkdir /tmp/foo ; cd /tmp/foo ; git init --bare)$ copybara copy.bara.sky
Copybaraの導入方法
- 週次スナップショットリリース の利用が最も簡単
- https://github.com/google/copybara/releases からバイナリ取得
- ソースからのビルド 手順
- JDK 11およびBazelのインストール
git clone https://github.com/google/copybara.gitbazel build //java/com/google/copybara- テスト実行(
bazel test //...)
システムパッケージ
- Arch Linux:
aur/copybara-gitでインストール可能
Intellij + Bazelプラグイン利用
- プロジェクト構成例
- ディレクトリ指定:
copybara/integration、java/com/google/copybaraなど - ターゲット指定:
//java/com/google/copybara/...など
- ディレクトリ指定:
Bazelでの事前ビルドバイナリ利用
- Java Runtime 21以上が必要
.bazelrcにrun --java_runtime_version=remotejdk_21を追加http_jarでリリースアーティファクトをダウンロードBUILD.bazelでjava_binaryとして宣言し、bazel runで実行
外部Bazelリポジトリとしてのビルド
WORKSPACEにhttp_archiveでCopybaraを追加- 依存モジュールのマクロをロードし、
bazel runで実行
DockerでのCopybara利用(実験的)
- Dockerイメージのビルド
docker build --rm -t copybara .
- コンテナ実行例
docker run -it -v "$(pwd)":/usr/src/app copybara help
- 環境変数でサブコマンドや設定ファイルを指定可能
COPYBARA_SUBCOMMAND、COPYBARA_CONFIG、COPYBARA_WORKFLOWなど
- Git設定・SSH認証情報の共有例
-v ~/.gitconfig:/root/.gitconfig:ro-v ~/.ssh:/root/.ssh-v ${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK} -e SSH_AUTH_SOCK
ドキュメント・サポート
- 公式ドキュメントやチュートリアル、リファレンスを順次整備中
- 質問や問い合わせは 公式メーリングリスト へ
- Bazelテストのログ出力を見やすくするには、
~/.bazelrcにtest --test_output=streamedを追加
Copybara は、複数リポジトリ間でのコード同期や移行を効率化し、権威リポジトリ管理やCI/CDパイプラインへの統合も容易なツール。多様な運用形態に柔軟に対応し、拡張性も高い点が大きな特徴。