Copybara؛ جابهجایی کد بین ریپازیتوریها
خلاصهٔ کاملتر
Copybara ابزاریه که گوگل داخل خودش برای انتقال و تبدیل کد بین ریپازیتوریها استفاده میکنه و حالا سورسش رو روی گیتهاب گذاشته. طبق توضیح مخزن، خیلی وقتها یه کد باید تو چند تا ریپازیتوری وجود داشته باشه و این ابزار کمک میکنه کد رو بینشون منتقل و در همون حال تبدیل کنی.
متداولترین سناریو نگهداشتن همزمان یه مخزن محرمانه و یه مخزن عمومیه که باید sync بمونن. Copybara ازت میخواد یکی از مخزنها رو بهعنوان مرجع (authoritative) انتخاب کنی تا همیشه یه منبع حقیقت واحد باشه، ولی بازم میشه به هر مخزنی کانتریبیوت کرد و از هرکدوم رلیز گرفت. مثلاً وقتی یه کانتریبیوتر تو مخزن عمومی تغییری میده، Copybara اون تغییر رو تبدیل میکنه و سر جای درستش تو مخزن مرجع میذاره.
یکی از ویژگیهای مهمش اینه که stateless ـه؛ یعنی وضعیت رو تو مخزن مقصد و بهشکل یه label داخل پیام کامیت ذخیره میکنه. همین باعث میشه چند نفر (یا یه سرویس) با همون config و مخزنها به نتیجهٔ یکسان برسن. کانفیگ هم به زبان Starlark تو یه فایل copy.bara.sky نوشته میشه:
core.workflow(
name = "default",
origin = git.github_origin(url = "https://github.com/google/copybara.git", ref = "master"),
destination = git.destination(url = "file:///tmp/foo"),
transformations = [
core.move("", "third_party/copybara"),
],
)فعلاً تنها نوع مخزنی که کامل پشتیبانی میشه Git ـه؛ خوندن از Mercurial هم هست ولی هنوز آزمایشیه. معماریش قابلگسترشه، پس میشه origin و destination سفارشی برای تقریباً هر سناریویی بهش اضافه کرد. برای اجرا هم میشه از رلیزهای هفتگی از پیش build شده، build از سورس با Bazel، یا اجرا داخل Docker استفاده کرد.
نکات کلیدی:
- Copybara کد رو بین ریپازیتوریها منتقل و تبدیل میکنه
- کاربرد اصلی: همگام نگهداشتن یه مخزن خصوصی و یه مخزن عمومی
- stateless ـه و وضعیت رو تو label پیام کامیت مقصد نگه میداره
- کانفیگ با Starlark تو فایل copy.bara.sky نوشته میشه؛ فعلاً فقط Git کامل پشتیبانی میشه




